gpt4 book ai didi

c# - 性能调整 powershell 文本处理

转载 作者:行者123 更新时间:2023-11-30 21:13:14 25 4
gpt4 key购买 nike

我有一个用 C# 编写的 SSIS 脚本任务,我希望将它移植到 powershell 以用作脚本。 C#版本运行时间为12.1s,而powershell版本运行时间为100.5s,几乎慢了一个数量级。我正在处理 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 中获得与在 SSIS 中的 C# 脚本任务中相同的性能?

最佳答案

除非您真正在 PowerShell 中正确使用 C#,否则您无法获得与 C# 相当的 PowerShell 性能。 Add-Type cmdlet 允许编译一些通常微不足道的 C# 片段并直接从脚本中调用它们。如果性能是一个问题并且由于某些原因无法使用 C# 程序集,那么我会采用这种方式。

请在此处查看示例:http://go.microsoft.com/fwlink/?LinkID=135195

关于c# - 性能调整 powershell 文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6925464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com