快速文本阅读(File.ReadAllText()和/或StreamReader.ReadToEnd()的替代方案)

时间:2014-12-11 07:58:32

标签: c# string performance text pinvoke

快速阅读的问题:我想知道是否有其他技术我忽略了,也许p /调用某个库(无论是winapi还是第三方库)。欢迎提出所有建议。

问题的完整背景: 对于给定的用例,我需要将文本文件读入内存,然后我可以操作它。问题不在于操作,而在于I / O.我目前正在使用以下技术使用C#:

1"文件"

的ReadAllText()方法
var content = File.ReadAllText(file.FullName);

2)" StreamReader"

的ReadToEnd()方法
var content = String.Empty;
using(var streamReader = File.OpenText(file.FullName)) {
    content = streamReader.ReadToEnd();
}

3)我也尝试将BufferedStream与方法2结合使用

对于5到20MB之间的文件,所有文件的性能大致相同。所以,接下来是问题:我想知道是否有其他技术我忽略了,也许p / invoke到某个库(无论是winapi还是第三方库)。欢迎提出所有建议。

3 个答案:

答案 0 :(得分:5)

您列出的所有变体的瓶颈都是I / O.从磁盘读入完整文件到内存的任何方法都会遇到同样的瓶颈。

因此,可以合理地得出结论,没有替代方法会产生显着的收益。当然,您会发现这些方法与其他方法之间的性能略有不同。但你永远不会看到数量级的收益。

答案 1 :(得分:1)

我在这个主题上找到了this文章,对你来说可能很有趣。

文章指出:

  • 将每一行读入一个字符串(缓冲或无缓冲)几乎总是比一次读取整个文本更快,并且几乎总是比使用字符串构建器更快。

  • 很多人说,使用BufferedReader总是最快的方式,根据他的测试,这有点不对。我在使用BufferedReader方面也有很好的经验,但这只是一种感觉,他的测试显示它并不总是最快的方式,更多的信息检查文章。

您将在文章中找到9种不同的阅读文本文件技术的示例代码和测试结果,即使这没有向您展示"最快的方式"这对你来说可能很有趣,也很有帮助。

答案 2 :(得分:0)

File.ReadAllLines()

提供更快的性能,但它取决于机器配置和文件大小。请参阅相关链接以获得良好的比较http://cc.davelozinski.com/c-sharp/fastest-way-to-read-text-files