2014-10-29 76 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} 
} 

注:當比較測試操作是做磁盤讀取這個樣子,總是運行多個測試和丟棄的第一個。如果磁盤上有任何板載讀取緩存,則第一個測試可以預加載緩存以供後續測試使用,並使結果偏斜。