繁体   English   中英

最有效的阅读文件方式

[英]Most efficient way of reading file

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

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

File.ReadLines (.NET 4.0+)可能是执行此操作的最有效内存的方法。

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

以前的版本没有以这种方式提供的流选项,但使用StreamReader逐行读取将实现相同的目的。

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

不确定这是最有效的,但它适用于我: 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);
        }
    }

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

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

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

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

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM