Select-String搜索字符串性能问题

      今天在一个脚本中需要用到“select-string”用来查找关键字,脚本很容易就写好了,但是在运行该脚本的时候却发现要将近20秒才能完成,执行效率太低了,仔细把脚本从头到尾看了一遍,觉得问题就是出在“select-string”身上,因为这其中要遍历的文本文件有6MB多大小。

      因为在脚本中很多地方需要在前一句命令的执行结果中查找关键字,为了方便,都是直接通过管道符将结果传给了“select-string”进行搜索,这样的搜索结果也很容易进行二次加工,如下:

netstat -an |select-string "ESTABLISHED"

TCP    192.168.1.12:49228     223.202.36.52:80       ESTABLISHED

    所以在对文本文件进行遍历的时候也使用的这种方法,如下:

$dt = Get-Date

$infor = Get-Content d:\setup.log |select-string "failed"

(New-TimeSpan $dt).totalseconds

16.0019152

      结果脚本运行时间为16秒多。

      既然这样的执行效率很低,那换另一种方法试试呢,直接多文件进行查找,如下:

$dt = Get-Date

$infor = Select-String -path d:\setup.log -Pattern "failed"

(New-TimeSpan $dt).totalseconds

0.3910224

      脚本运行时间才不到0.4秒,两种方法相差了了足足40倍之多。

      在第一种方法中,先是使用了“Get-Content”获取文本文件的内容,然后才使用“Select-String”进行搜索,是不是在使用“Get-Content”获取文本文件内容的时候耗时较长呢?于是又做了下面一个试验,如下:

$dt = Get-Date

$infor = Get-Content d:\setup.log

(New-TimeSpan $dt).totalseconds

 

$dt2 = Get-Date

$infor2 = $infor|select-string "failed"

(New-TimeSpan $dt2).totalseconds

2.5481458

15.052861

      两条语句的执行时间一个是2秒多,另一个是15秒多,可见其耗时都远远多于直接使用“Select-String”对文件进行遍历,在以后我们应该尽量避免使用第一种方法遍历文件。

posted on 2013-03-05 19:28  momingliu11  阅读(1331)  评论(0编辑  收藏  举报