首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在PowerShell中"for($i=1;$i -le 1000000;$i++){}“的执行时间比"for([int]$i=1;$i -le 1000000;$i++){}”快

为什么在PowerShell中"for($i=1;$i -le 1000000;$i++){}“的执行时间比"for([int]$i=1;$i -le 1000000;$i++){}”快
EN

Stack Overflow用户
提问于 2012-11-01 01:34:07
回答 1查看 362关注 0票数 7

示例代码:

代码语言:javascript
复制
# Step 1
$start = get-date
for($i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

# Step 2
$start = get-date
for([int]$i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

# Step 3
$start = get-date
for([int64]$i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

# Step 4
$start = get-date
for([float]$i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

# Step 5
$start = get-date
for([double]$i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

# Step 6
$start = get-date
for($i=1; $i -le 1000000; $i++){}
$end = get-date
($end-$start).TotalMilliseconds
Remove-Variable i

结果:

1845.1056

3160.1808

5029.2877

5521.3158

4504.2576

1804.1032

步骤2-6之间的差异是毫无疑问的。但是1和2和6之间的区别是无法解释的:这些病例中的$i具有"System.Int32“类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 04:20:32

如果您想很好地解释步骤1和步骤2之间的区别,只需在命令提示符下尝试:

代码语言:javascript
复制
Remove-Variable i
Trace-Command -Name TypeConversion -Expression {for($i=1; $i -le 1000000; $i++){}} -PSHost

然后:

代码语言:javascript
复制
Remove-Variable i
Trace-Command -Name TypeConversion -Expression {for([int]$i=1; $i -le 1000000; $i++){}} -PSHost

这个确认@zdan假设的不同之处在于在每个循环中执行的强制转换。步骤1和步骤6是相同的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13163635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档