【发布时间】:2011-03-23 21:23:18
【问题描述】:
如何查看硬盘速度?我不能用System.IO.File.Copy和定时器来获取硬盘速度,因为缓存文件后,速度真的会比实时高。
我能做些什么呢?
【问题讨论】:
-
您需要什么速度?读?写?顺序?随机?
-
写入速度?如果可能的话,还要 FileCopy 吗?
标签: c# performance-testing hard-drive
如何查看硬盘速度?我不能用System.IO.File.Copy和定时器来获取硬盘速度,因为缓存文件后,速度真的会比实时高。
我能做些什么呢?
【问题讨论】:
标签: c# performance-testing hard-drive
写入文件后后续读取速度远高于预期的原因是文件在写入时被操作系统缓存在磁盘系统缓存中,即在内存中。随后的文件读取实际上是从内存中读取的,而不是从磁盘中读取的。
请参阅此代码项目文章,该文章提供了一种通过利用 FILE_FLAG_NO_BUFFERING 标志绕过 OS 磁盘缓存的解决方案:
http://www.codeproject.com/KB/files/unbuffered.aspx
此解决方案可在您的上下文中使用,以避免操作系统磁盘缓存,从而获得“真正的”磁盘速度。
【讨论】:
您在询问“实时”。由于在实际情况下正在使用缓存,因此我看不到任何问题。您可能想使用一些脚本或类似的东西来运行您的程序,而不是一些 File.Copy 或其他更简单的测试。
但真正的问题是,然后呢? IE。您是想知道某个磁盘是否足够快,还是想知道您的程序是否足够快?
【讨论】: