样例代码:
# 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/