2012-10-31 6 views
7
codice

Esempio:

# 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 

Risultati:

1845,1056
3160,1808
5029,2877
5521,3158
4504,2576
1804,1032

non ci sono dubbi sulle differenze tra i passaggi 2-6. Ma le differenze tra 1 e 2 e 6 sono inspiegabili: $ i in questi casi ha tipo "System.Int32".

+0

Ho visto più o meno gli stessi risultati di te. –

+3

Non c'è nulla di intrinsecamente sbagliato nel modo in cui si misura il tempo di esecuzione, ma per i test futuri si potrebbe voler controllare questo al prompt: get-help Measure-Command – EBGreen

+2

Ciò che è interessante è che si faccia '$ i = new -object -type Int64' o '$ i = new-object -type Int32' e quindi' for ($ i = 1; $ i -le 1000000; $ i ++) {} ', ottieni risultati simili su tutta la linea (per iNT). Qualcosa in quell'operatore di cast forse ... – zdan

risposta

4

Se si vuole una buona spiegazione della differenza tra Fase 1 e Fase 2 solo provare al prompt dei comandi:

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

E poi:

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

Questo conferma @zdan assunto la differenza è nel cast che si fa in ogni loop. I passaggi 1 e 6 sono i nomi.

+0

+1 Stavo scrivendo la stessa risposta prima che SO mi avvisi del tuo –

Problemi correlati