随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

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   momingliu11  阅读(1336)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2013年3月 >
24 25 26 27 28 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6

点击右上角即可分享
微信分享提示