【发布时间】:2019-03-20 18:47:54
【问题描述】:
我正在通过 FileStream(.NET 3.5,控制台应用程序)读取 800 Mb 文件。硬盘有 SATA 3 总线(600 Mb/s),但我想不通:为什么读取文件的时间只有 486 毫秒。
当我尝试异步读取时,情况会变得更糟 - 大约需要 100-150 毫秒。
该文件没有被缓存 - 只有当文件实际加载到内存中时,我才能看到 RAM 消耗增加了 800 Mb。
请帮帮我,这对我来说似乎很奇怪
【问题讨论】:
-
它可能不会缓存在您的应用程序中,但 Windows 文件系统在 Windows 缓存管理器中运行自己的内部文件缓存。请参阅:docs.microsoft.com/en-us/windows/desktop/fileio/file-caching 它还可以分配缓冲区并向您传递一个句柄,同时异步读取其余部分。
-
“未缓存”?你确定吗?在任务管理器中观察 RAM 使用情况是衡量正在发生的事情的一种糟糕方法。如果您多次点击它,操作系统可能会将大部分文件保存在内存中。您的应用在冷重启后如何保持?
-
好的,我对文件做了一些改动,重命名了它,它仍然是大约 470-490 毫秒。
-
您正在对文件执行其他操作,我几乎可以肯定缓存系统足够了解以进行跟踪。更改文件并重命名它并不(必然)意味着它不再在缓存中。
-
好的,现在第一次尝试读取 26 Gb 的文件,这绝对超出了 RAM 并且无法缓存 - 有时它的读取速度为 90 Mb/s,有时它低于 60 Mb/s
标签: c# .net performance filestream diskcache