样例代码:

# 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.10563160.18085029.28775521.31584504.25761804.1032

毫无疑问,第2-6步之间的差异。但是1和2与6之间的区别是无法解释的:在这些情况下,$ i的类型为“System.Int32”。

最佳答案

如果您想对步骤1和步骤2之间的区别有一个很好的解释,请在命令提示符下尝试:

Remove-Variable i
Trace-Command -Name TypeConversion -Expression {for($i=1; $i -le 1000000; $i++){}} -PSHost

进而 :
Remove-Variable i
Trace-Command -Name TypeConversion -Expression {for([int]$i=1; $i -le 1000000; $i++){}} -PSHost

这可以确认@zdan假设差异在于每个循环中完成的转换。步骤1和6相同。

关于powershell - 为什么在PowerShell中 “for($i=1; $i -le 1000000; $i++){}”的执行时间比 “for([int]$i=1; $i -le 1000000; $i++){}”快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13163635/

10-10 11:58