2017-10-13 31 views
0

在Powershell中,我有一個腳本,可以在文件存在時執行某些操作,並在沒有文件時顯示一條消息。我可以用兩種方式把它寫:在IF/ELSE評估中,哪些代碼運行速度更快:IF中的大塊代碼或ELSE中的大塊?

IF (Test-Path $path_to_file) {run some elaborate code} 
ELSE {write-host "File doesn't exist"} 

或者我可以這樣做:

IF ((Test-Path $path_to_file) -eq $FALSE) {write-host "File doesn't exist"} 
ELSE {run elaborate code} 

這兩個做同樣的事情。處理速度會有什麼不同(假設'精心編碼'是解析長文本文件的長段代碼)?

+0

'{運行詳細代碼}'是一個'ScriptBlock'(因爲它是在大括號之間定義的)。 「ScriptBlock」僅在需要時才被解釋。這意味着當文件不存在時它不會有什麼區別,所以不會評估「{運行詳細代碼}」。我想你會發現更多的區別,因爲條件之間的差異,對於性能測試你應該使用相同的條件格式IF((Test-Path $ path_to_file)-eq $ True){運行一些詳細的代碼} ...第一種方式是獲得良好的比較。 – iRon

回答

2

if/else語句無論執行一次,也不應影響任何代碼的運行時間。

if (x) { <#short#> } else { 
    #Long 
} 

這通常是更具可讀性,如果它是一個單一的線,你最終不會找其中else在碼長塊的結尾試圖讀取它回來的時候連接。

如果出現任何性能變化,它可能會非常小,以致上述聲明的可讀性更重要。

對'有意義'的代碼進行10000次迭代,與打印一個字符串,如果代碼在If或Else中可以忽略不計(不是可靠地偏向一個結果),我會說你'在考慮這個問題時甚至不考慮性能。