快速阅读的问题:我想知道是否有其他技术我忽略了,也许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还是第三方库)。欢迎提出所有建议。
答案 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