【发布时间】:2014-12-11 07:58:31
【问题描述】:
快速阅读问题:我想知道是否还有其他我忽略的技术,可能是 p/invoke 到某个库(无论是 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 还是第三方库)。欢迎所有建议。
【问题讨论】:
-
这还不够快吗?文件不是那么大,所以我想知道如果当前方法可读且高效,为什么还要使用 winapi。如果它们真的很大,您可以使用
MemoryMappedFile。 -
@TimSchmelter 虽然我理解您的评论,但这与最初提出的问题无关,例如也许我不需要它,但其他人可能。但我理解你的意图,当然 winapi 或第三方调用可能会很混乱,但这是在实施时需要考虑的事情,或者不是。对于我的情况,这确实很重要,否则我不会求助于询问。如果没有解决方案,那么我会接受它:)。
-
唯一的其他方法是:1) 在您的硬件中找到更好的 I/O 速率(将您的硬件替换为更好的东西)或 2) 为设备找到更好的 I/O 驱动程序。没有其他事情可以真正做到。
-
TimSchmelter 我将研究 MemoryMappedFile (msdn)。 @Ahmedilyas - 这确实是一个有效的观点,我们也可以对此进行测试。
-
@Tim 将整个文件放入托管内存时,映射不会更快。
标签: c# string performance text pinvoke