最有效的阅读文件方式

时间:2012-02-09 14:47:33

标签: c# file-handling

我有一个文件,其中包含一定数量的固定长度行。我需要读取每一行以获取该数字并处理它们并写入文件。 由于我需要读取每一行,随着行数的增加,它变得非常耗时。

是否有一种有效的方法来读取文件的每一行?我正在使用C#。

4 个答案:

答案 0 :(得分:14)

File.ReadLines(.NET 4.0+)可能是最有效的内存方式。

它返回一个IEnumerable<string>,意味着这些行将以流式方式延迟读取。

以前的版本没有以这种方式提供的流媒体选项,但使用StreamReader逐行阅读也会达到相同的效果。

答案 1 :(得分:0)

从文件中读取所有行始终至少为O(n)。当文件大小开始成为问题时,可能是查看为信息而不是平面文件创建数据库的好时机。

答案 2 :(得分:0)

不确定这是最有效的,但对我来说效果很好: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx

    //Declare a new file and give it the path to your file
    FileInfo fi1 = new FileInfo(path);

    //Open the file and read the text
    using (StreamReader sr = fi1.OpenText()) 
    {
        string s = "";
        // Loop through each line
        while ((s = sr.ReadLine()) != null) 
        {
            //Here is where you handle your row in the file
            Console.WriteLine(s);
        }
    }

答案 3 :(得分:0)

无论您使用哪种操作系统,代码与实际存储机制之间都会有多层。硬盘驱动器和磁带驱动器以块为单位存储文件,目前这些文件通常大约为4K。如果你想读取一个字节,设备仍然会将整个块读入内存 - 这种方式更快。设备和OS也可以各自保持块的缓存。因此,您无法更改标准(高度优化)的文件读取行为;只需在需要时阅读文件,让系统负责其余部分。

如果处理文件的时间成为问题,可能有用的两个选项是:

  1. 尝试安排使用较短的文件。听起来你正在处理日志文件或其他东西 - 更频繁地运行你的程序可能有助于至少给出更好性能的外观。

  2. 更改数据的存储方式。同样,我理解该文件来自某些外部源,但也许您可以安排运行的作业,定期将原始文件转换为您可以更快速读取的内容。

  3. 祝你好运。