У меня есть задача сценария служб SSIS, написанная на C #, и я хочу, чтобы она была перенесена в powershell для использования в качестве сценария. Версия C # работает на 12.1 с, но версия powershell занимает на 100.5 с почти на порядок медленнее. Я обрабатываю 11 текстовых файлов (CSV) с 3-4 миллионами строк в каждом формате:
<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())}
}
}
Как я могу получить такую же производительность в powershell, какую я могу получить в своей задаче C # Script в SSIS?