2014-10-29 75 views
-2
$File="C:\temp\test\ID.txt" 
$line="ART.023.AGA_203.PL" 

Measure-Command {$Sel = Select-String -pattern $line -path $File } 

Measure-Command { 
    $reader = New-Object System.IO.StreamReader($File) 
    $content = $reader.ReadToEnd().Split('`n') 
    $results = $content | select-string -Pattern $line 
    } 

Measure-Command { 
     $content= get-content $File 
     $results = $content | select-string -Pattern $line 
     $results 
     } 


Days    : 0 
Hours    : 0 
Minutes   : 0 
Seconds   : 0 
Milliseconds  : 197 
Ticks    : 1970580 
TotalDays   : 2.28076388888889E-06 
TotalHours  : 5.47383333333333E-05 
TotalMinutes  : 0.0032843 
TotalSeconds  : 0.197058 

TotalMilliseconds : 197.058 

Days    : 0 
Hours    : 0 
Minutes   : 0 
Seconds   : 4 
Milliseconds  : 135 
Ticks    : 41350664 
TotalDays   : 4.78595648148148E-05 
TotalHours  : 0.00114862955555556 
TotalMinutes  : 0.0689177733333333 
TotalSeconds  : 4.1350664 

TotalMilliseconds : 4135.0664 

Days    : 0 
Hours    : 0 
Minutes   : 0 
Seconds   : 4 
Milliseconds  : 926 
Ticks    : 49265692 
TotalDays   : 5.70204768518518E-05 
TotalHours  : 0.00136849144444444 
TotalMinutes  : 0.0821094866666667 
TotalSeconds  : 4.9265692 
TotalMilliseconds : 4926.5692 

我想搜索约10000 $线在$文件PowerShell的任何搜索一个大的文本文件快

搜索时间很慢,再快?

例如:

搜索关键字:$线,然后$文件将显示线

关键字:ART.023.AGA_203.PL

文件:2,45433; ART.023.AGA_203 .PL; DDDD; WWWW; TT;

+0

197毫秒“非常慢”究竟如何?第二个和第三个例子中的耗时步骤显然是从磁盘读取文件到内存中,所以不要这样做。 – 2014-10-29 10:52:47

回答

0

这与您的其他方法相比如何?

Measure-Command { 
Get-Content $file -ReadCount 1000 | 
foreach {$_ -match $line} 
} 

注:当比较测试操作是做磁盘读取这个样子,总是运行多个测试和丢弃的第一个。如果磁盘上有任何板载读取缓存,则第一个测试可以预加载缓存以供后续测试使用,并使结果偏斜。