gpt4 book ai didi

c# - 优化 C# 文件 IO

转载 作者:可可西里 更新时间:2023-11-01 08:05:18 25 4
gpt4 key购买 nike

场景 - 150MB 的文本文件,它是旧电子邮件帐户的导出收件箱。需要解析并提取来自特定用户的电子邮件,并将这些电子邮件写入一个新的单个文件。我有可用的代码,它只是太慢了。

我正在使用标记字符串来搜索从原始文件开始/结束副本的位置。

这是主要功能:

 StreamReader sr = new StreamReader("c:\\Thunderbird_Inbox.txt");
string working = string.Empty;
string mystring = string.Empty;
while (!sr.EndOfStream)
{
while ((mystring = sr.ReadLine()) != null)
{
if (mystring == strBeginMarker)
{
writeLog(mystring);

//read the next line
working = sr.ReadLine();

while( !(working.StartsWith(strEndMarker)))
{
writeLog(working);
working = sr.ReadLine();

}
}
}

}
this.Text = "DONE!!";
sr.Close();

将所选消息写入新文件的函数:

  public void writeLog(string sMessage)
{
fw = new System.IO.StreamWriter(path, true);
fw.WriteLine(sMessage);
fw.Flush();
fw.Close();
}

同样,这个过程有效。我得到了一个很好的输出文件,只是需要很长时间,我相信有办法让它更快。

最佳答案

最大的优化是将您的 writeLog 方法更改为在此操作开始时打开文件一次,写入多次,然后在结束时关闭它。

现在,您在编写的每个迭代中打开和关闭文件,这肯定会减慢速度。

尝试以下操作:

// Open this once at the beginning!
using(fw = new System.IO.StreamWriter(path, true))
{
using(StreamReader sr = new StreamReader("c:\\Thunderbird_Inbox.txt"))
{
string working;
string mystring;
while ((mystring = sr.ReadLine()) != null)
{
if (mystring == strBeginMarker)
{
writeLog(mystring);

//read the next line
working = sr.ReadLine();

while( !(working.StartsWith(strEndMarker)))
{
fw.WriteLine(working);
working = sr.ReadLine();
}
}
}
}
}
this.Text = "DONE!!";

关于c# - 优化 C# 文件 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751406/

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