C# 非常慢的 StreamReader

标签 c# performance streamreader csv

我正在使用我编写的一些不是最佳的代码...:-|

我有以下代码:

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/

相关文章:

c# - EPiServer 9 : Is there any real alternative for EPiServer ContentArea Contents?

c# - FileStream 很慢吗?

c# - 正则表达式查找和替换以换行标签

c# - 在 OnMessageOptions 中使用 ExceptionReceived

c# - 在 C# asp.net 中应用掩码字符串?

Android 电池使用情况分析

java - 为什么我的 java 图形滞后这么多?

php - CakePHP 站点主页的 Time to First Byte 很长

java - 如何使数组大小取决于文本文件大小?

csv - 将 CsvHelper 与流一起使用