首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提高读写大文本文件的性能?

如何提高读写大文本文件的性能?
EN

Stack Overflow用户
提问于 2012-08-13 14:11:16
回答 1查看 2.5K关注 0票数 2

我已经写了一个程序来清理我几个月来收集的一些财务数据。它总共大约100 2GB,并且每天都在增长,每个文件大约1-2 2GB。它目前以文本文件格式存储。

下面的代码用于清理数据:

代码语言:javascript
运行
复制
    static void Main()
    {
        string inputString;
        string outputString;

             // others variable omitted

        string[] lineSplit;

        foreach (string fullPath in Directory.GetFiles(inputDirectory))
        {

            using (StreamReader reader = new StreamReader(fullPath))        //read from input file
            {
                while ((line = reader.ReadLine()) != null)
                {
                          //logic to clean data

                                ...

                         ///////////////////////////////////////////////////////////

                    using (StreamWriter writer = File.AppendText(outputFile))
                    {
                        writer.WriteLine(outputString);
                    }
                }
            }
        }       
    }

它非常慢,我估计对于100 to的数据,我大约需要3-4天才能完成它。我知道这是关于我的IO操作,因为我没有缓冲区等来做它。我对C#还是比较陌生的,我找不到任何相关的例子来为IO构建合适的缓冲区。我发现的大多数示例都是用于下载的,不适用于阅读文本文件。我无法将整个文件加载到内存中进行处理,因为它太大了。我该怎么做呢?有人能给我一些我可以使用的代码片段吗?谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2012-08-13 14:13:03

您将在每一行上重新打开输出文件。将循环移到通过调用File.AppendText开始的块内部

代码语言:javascript
运行
复制
using (TextReader reader = File.OpenText(fullPath))
{
    using (TextWriter writer = File.AppendText(outputFile))
    {
         while ((line = reader.ReadLine()) != null)
         {
             // Logic to clean data
            writer.WriteLine(outputString);
         }
    }
}

当然,这里假设每个输入文件都有一个输出文件。如果不是这样的话-如果每一行都可以转到一个小集合中的不同文件-你可能想让所有的输出文件保持打开,只保留一个字典(或类似的东西),这样你就可以快速地写你想写的任何文件。

票数 8
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11928971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档