首页 > 后端开发 > C++ > 如何在C#中有效地逐行读取文本文件?

如何在C#中有效地逐行读取文本文件?

Mary-Kate Olsen
发布: 2025-01-29 08:27:09
原创
965 人浏览过

How Can I Efficiently Read Text Files Line by Line in C#?

C#高效逐行读取文本文件

在.NET C#环境中,逐行读取文本文件是一项常见任务。本文将探讨几种不同方法,并分析其效率。

使用StreamReader.ReadLine

您当前的方法使用StreamReader.ReadLine,缓冲区大小设置为128。然而,基准测试表明,将缓冲区大小增加到1024(默认值)或4096(NTFS簇大小)可以显着提高性能。以下代码片段演示了这一点:

const Int32 BufferSize = 128;
using (var fileStream = File.OpenRead(fileName))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize)) {
    String line;
    while ((line = streamReader.ReadLine()) != null)
    {
      // 处理每一行
    }
}
登录后复制

使用File.ReadLines

此方法在内部使用StreamReader,与缓冲区大小较小的StreamReader.ReadLine相比,性能有所提高。它使用迭代器块,并减少了行的内存消耗。

var lines = File.ReadLines(fileName);
foreach (var line in lines)
  // 处理每一行
登录后复制

使用File.ReadAllLines

File.ReadLines类似,但返回一个字符串数组而不是IEnumerable<string>。此方法需要更多内存,但允许随机访问行。

var lines = File.ReadAllLines(fileName);
for (var i = 0; i < lines.Length; i++)
  // 处理每一行
登录后复制

使用String.Split

虽然String.Split很方便,但在读取大型文件时,其速度明显较慢,如下例所示:

using (var streamReader = File.OpenText(fileName)) {
  var lines = streamReader.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  foreach (var line in lines)
    // 处理每一行
}
登录后复制

结论

总而言之,对于逐行读取文本文件,File.ReadLines因其简单性和效率而被推荐。如果需要自定义共享选项,请考虑使用带有适当缓冲区大小的StreamReader.ReadLine。但是,必须进行基准测试以确定最适合您特定需求的解决方案。

以上是如何在C#中有效地逐行读取文本文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板