【发布时间】:2010-11-08 06:25:36
【问题描述】:
我有一个在磁盘上读写文件的小程序。将其分解为最简单的级别,它从一个文件流中读取字节并将它们写入另一个文件流。它可以很好地履行职责,但不是最快的。
我见过其他应用程序可以以惊人的速度完成千兆字节或更多的读取/写入。显然,它们比小型 .NET 应用程序更接近金属。
什么是最有效的 .NET API 用于向/从磁盘进行流式传输?哪些 win32 API 可用(并且值得 p/调用)用于快速磁盘访问?
【问题讨论】:
-
我不明白为什么 WinAPI 调用应该比 .NET 类更快——毕竟后者在内部使用前者。除此之外,内存映射文件 (en.wikipedia.org/wiki/Memory_mapped_file) 是否合适?
-
为什么 Dot.net 有不止一种写入文件的方法?读取和写入文件是非常基本的,具有“快速”和“慢速”形式没有任何意义 - 因为没有人会使用“慢速”版本,因为它们都有相同的目标。
-
在半小时内,我可以设置一个测试来比较 .net 文件操作(可能是幼稚的实现,这是问题的一部分)和具有密集 IO 的本机应用程序(例如 QuickPAR),它将关闭 .NET 应用程序的大门。这就是问题的重点——如何在 .NET 中实现最佳磁盘吞吐量?
标签: .net winapi streaming disk