【问题标题】:How to read Lengthy text File Efficently?如何有效地阅读冗长的文本文件?
【发布时间】:2011-07-25 17:18:20
【问题描述】:

如果您有一个包含许多条目的大文本文件,您必须获取这些条目并将它们保存到 List 中,有没有比我的代码中的传统方式更快的方法来做到这一点

    /// <summary>
    /// Reads Data from the given path
    /// </summary>
    /// <param name="path">Path of the File to read</param>
    public void Read(string path)
    {
        try
        {
            FileStream file = new FileStream(path, FileMode.Open);
            StreamReader reader = new StreamReader(file);
            string line;

            while ((line = reader.ReadLine()) != null)
            {                
                myList.Add(line);
                System.Windows.Forms.Application.DoEvents();
            }
            reader.Close();
            file.Close();
        }
        catch (Exception c)
        {
            MessageBox.Show(c.Message);
        }

    }

【问题讨论】:

  • 文本文件有多大?内容是什么?各种字符串? html? xml?你的程序想做什么? (听起来你正在制作解析器......)

标签: c# optimization file-read


【解决方案1】:

更快 - 可能不会,但更短?是的:

myList.AddRange(File.ReadAllLines(path));

此外,如果这是一个非常大的文件,您不应该在 UI 线程中进行加载,只需使用后台工作程序 - 这样您就可以避免在每一行调用 Application.DoEvents() 并且可能会使这比您原来的方法 - 虽然与文件 I/O 的成本相比,节省的成本很少,但您将拥有更简洁的代码。

【讨论】:

  • +1 用于获得 C# 特定答案,而我的答案更通用。
【解决方案2】:

通常我会将此作为评论,但在这种情况下它实际上是一个答案。

不,没有。阅读文件的速度不会比阅读文件更快!

读取文件是线性时间,放下手。

现在,如果您知道有关文件的一些信息,比如说...您想跳过一些标题信息,您可以通过向前跳过来做到这一点。但是如果文件中的位置取决于之前的数据(不是固定宽度),或者您需要其中的每一行,那么它不会比这更快。

【讨论】:

    【解决方案3】:

    您将不得不摆脱 DoEvents()。试试看:在它忙于读取文件时关闭表单。请注意,您的程序不会停止。很有可能它会在读取完成后崩溃并死掉。

    这应该也可以加快文件读取速度。为了防止 UI 冻结,您应该使用 BackgroundWorker。请务必阅读 MSDN 库文章以了解他们的正确性。

    让它更快仍然需要硬件。首先要问为什么你必须阅读这么大的文本文件,该文件中的信息可能属于数据库。

    【讨论】:

    • 这是我为其制作应用程序的人所要求的,他有文本文件,其中有大量的域列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2021-03-15
    • 2017-09-20
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多