C# 如何有效地阅读冗长的文本文件?

C# 如何有效地阅读冗长的文本文件?,c#,optimization,file-read,C#,Optimization,File Read,如果你有一个大的文本文件,其中有很多条目,你必须得到这些条目并将它们保存到列表中,有没有比我的代码中的传统方式更快的方法呢 /// <summary> /// Reads Data from the given path /// </summary> /// <param name="path">Path of the File to read</param> public void Read(string

如果你有一个大的文本文件,其中有很多条目,你必须得到这些条目并将它们保存到列表中,有没有比我的代码中的传统方式更快的方法呢

    /// <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);
        }

    }
//
///从给定路径读取数据
/// 
///要读取的文件的路径
公共无效读取(字符串路径)
{
尝试
{
FileStream file=newfilestream(路径,FileMode.Open);
StreamReader=新的StreamReader(文件);
弦线;
而((line=reader.ReadLine())!=null)
{                
myList.Add(行);
System.Windows.Forms.Application.DoEvents();
}
reader.Close();
file.Close();
}
捕获(例外c)
{
MessageBox.Show(c.Message);
}
}

通常我会对此发表评论,但在这种情况下,这实际上是一个答案

不,没有。您读取文件的速度不能超过。。。读它

读取一个文件是线性时间,不用动手


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

通常我会对此进行评论,但在这种情况下,这实际上是一个答案

不,没有。您读取文件的速度不能超过。。。读它

读取一个文件是线性时间,不用动手


现在,如果你知道一些关于这个文件的信息,比如。。。您想跳过一些标题信息,您可以通过向前跳过来实现。但是,如果文件中的位置取决于以前的数据(不是固定宽度),或者您需要文件中的每一行,则不会比这更快。

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

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

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

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

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

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

您将不得不删除DoEvents()。尝试一下:在表单忙于读取文件时关闭表单。请注意,您的程序不会停止。读取完成后,它很可能崩溃并死亡

这应该会加快文件的读取速度。为了防止UI冻结,您应该使用BackgroundWorker。请务必阅读MSDN库中的文章,让他们正确理解这一点


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

你必须去掉DoEvents()。尝试一下:在表单忙于读取文件时关闭表单。请注意,您的程序不会停止。读取完成后,它很可能崩溃并死亡

这应该会加快文件的读取速度。为了防止UI冻结,您应该使用BackgroundWorker。请务必阅读MSDN库中的文章,让他们正确理解这一点


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

文本文件有多大?内容是什么?各种各样的弦?html?xml?你的程序想做什么?(听起来像是在做解析器……)文本文件有多大?内容是什么?各种各样的弦?html?xml?你的程序想做什么?(听起来像是在做解析器…)+1代表我的答案更通用,1代表我的答案更通用,1代表我的答案更通用,1代表我的答案更通用,这是我制作应用程序的人所要求的,他有文本文件,其中有我制作应用程序的人所要求的大量域,他有文本文件,其中有大量的领域