私はC#で書かれたSSISスクリプトタスクを持っています。これをPowerShellに移植してスクリプトとして使用したいと考えています。 C#のバージョンは12.1秒で実行されますが、PowerShellのバージョンでは100.5秒ほどの時間がかかります。私は、フォーマットのそれぞれで約3~4万行と11個のテキストファイル(CSV)を処理しています:パフォーマンスチューニングpowershellテキスト処理
<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
AUDJPY,20010102,230100,64.30,64.30,64.30,64.30,4
AUDJPY,20010102,230300,64.29,64.29,64.29,64.29,4
<snip>
私は単純に、列が20110101の日付を持って新しいファイルに内容を書きたいですまたはそれ以降。ここに私のC#のバージョンがあります:
private void ProcessFile(string fileName)
{
string outfile = fileName + ".processed";
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(fileName))
{
string line;
int year;
while ((line = sr.ReadLine()) != null)
{
year = Convert.ToInt32(sr.ReadLine().Substring(7, 4));
if (year >= 2011)
{
sb.AppendLine(sr.ReadLine());
}
}
}
using (StreamWriter sw = new StreamWriter(outfile))
{
sw.Write(sb.ToString());
}
}
ここに私のPowerShellのバージョンがあります:
foreach($file in ls $PriceFolder\*.txt) {
$outFile = $file.FullName + ".processed"
$sr = New-Object System.IO.StreamReader($file)
$sw = New-Object System.IO.StreamWriter($outFile)
while(($line = $sr.ReadLine() -ne $null))
{
if ($sr.ReadLine().SubString(7,4) -eq "2011") {$sw.WriteLine($sr.ReadLine())}
}
}
は、どのように私はSSISの私のC#スクリプトタスクで取得することができますPowerShellで同じ性能を得ることができますか?
興味深いことに、両方のループの例でReadLine()を3回呼び出す予定ですか?それは1行をスキップし、2番目に一致し、3番目を印刷して、繰り返すように見えます。 –