2017-10-13 8 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中可以忽略不计(不是可靠地偏向一个结果),我会说你'在考虑这个问题时甚至不考虑性能。