最近我在读取网络驱动器上的大文件时遇到问题,我无法确定我可能做错了什么。我在 C++(非托管)和 C# 中都进行了尝试,并且两者的性能大致相同......这有点糟糕。
有时它会在网络上以 4 KB/sa 的速度读取文件,但如果该文件位于本地 HD 上,它将轻松实现 HD 可以输出的最大数据速率。那就是一次读取 64 KB 的块......我尝试使用更大的缓冲区,直到疯狂的数字,或者更小,它并没有太大的区别。
我在 C# 中尝试使用 FileStream 上的 BeginRead 和 C++ 中的 OVERLAPPED IO 的异步 IO 以及同步读取,它们都有相同的问题,这在网络上很慢。
我们想出的唯一解决方案是在实际读取文件之前使用本地 HD 上的 OS CopyFile 功能复制文件,但我对这种方法不太满意。看起来 CopyFile 正在做一些我们没有做的事情,这使得它比我们的方法快得多。
任何人都知道这是为什么?