清理文件的C#脚本需要很长时间才能执行

时间:2014-06-14 19:48:10

标签: c# .net ssis text-files

我有这个脚本;即使文件是0.4 GB,也需要很长时间才能运行。有1000多个文件,每次执行此脚本,每个文件大约需要1分钟。

有什么方法可以加快这个剧本的速度吗?

 String strFile = File.ReadAllText(
    Dts.Variables["User::File_Name_Path_4"].Value.ToString());
 strFile = strFile.Replace("#Fields: ", "");

 File.WriteAllText(
    Dts.Variables["User::File_Name_Path_4"].Value.ToString(), strFile);

1 个答案:

答案 0 :(得分:2)

如果文件很大(>几KB),将整个内容读入内存是一个坏主意。它为分配器和收集器创建了大量工作。更好的想法是将内容从一个地方流式传输到另一个地方,并对每个部分进行替换。此示例假定线条不太大。如果文件在一行上,您将不得不做一些更复杂的事情来阅读较小的块(并确保您没有打破您要替换的内容的文本。)

string tempFile = Path.GetTempFileName();
string fileName = Dts.Variables["User::File_Name_Path_4"].Value.ToString();
using (var writer = new StreamWriter(tempFile))
using (var reader = new StreamReader(fileName))
{
    while(!reader.EndOfStream)
    {
        writer.WriteLine(reader.ReadLine().Replace("#Fields: ", ""));
    }
}
File.Delete(fileName);
File.Move(tempFile, fileName);