我正在使用我编写的一些不是最佳的代码...:-|
我有以下代码:
string fmtLine = "";
string[] splitedFmtLine;
int counterFMTlines = 0;
foreach (string fmtF in fmtFiles)
{
using (StreamReader sr = new StreamReader(fmtF))
{
while ((fmtLine = sr.ReadLine()) != null)
{
Console.WriteLine(counterFMTlines++);
foreach (L3Message message in rez)
{
splitedFmtLine = Regex.Split(fmtLine, "\t");
if (message.Time == splitedFmtLine[0])
{
message.ScramblingCode = splitedFmtLine[7];
}
}
}
}
}
当 List 为空并且只有一个文件(制表符分隔,280000 行)时,我测试了这段代码,即使如此,我的文件的所有 280000 行也花了一生(1 分钟)。这意味着执行跳过了 foreach 循环,其中是我的 myObjs 列表。
我不明白为什么花了这么长时间?
例如,我用不同的文本文件(源文件)填充我的 myObjs 列表(树层次结构),但大于此制表符分隔(制表符分隔:16MB,源文件:36MB),与此 1 相比只用了第二个分钟。
最佳答案
您正在向控制台写入 280.000 次,这非常慢。删除控制台输出。此外,使用 string.Split('\t') 比这个特定的正则表达式调用要快得多。
关于C# 非常慢的 StreamReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955916/