Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 硬盘读取文件的速度超过了声明的速度。通过文件流读取_C#_.net_Performance_Filestream_Diskcache - Fatal编程技术网

C# 硬盘读取文件的速度超过了声明的速度。通过文件流读取

C# 硬盘读取文件的速度超过了声明的速度。通过文件流读取,c#,.net,performance,filestream,diskcache,C#,.net,Performance,Filestream,Diskcache,我正在通过FileStream(.NET3.5,控制台应用程序)读取800MB的文件。硬盘驱动器有SATA 3总线(600 Mb/s),但我不明白:为什么读取文件的时间只有486毫秒 当我尝试异步读取时,情况会变得更糟——大约需要100-150毫秒 文件没有被缓存——只有当文件实际加载到内存中时,我才能看到RAM消耗增加了800 Mb 请帮帮我,在我看来,这件事很奇怪,当你读取一个文件时,它也会被操作系统复制到文件系统缓存中。如果文件自上次读取后未被修改,并且仍然被缓存,则读取完全由RAM提供。

我正在通过FileStream(.NET3.5,控制台应用程序)读取800MB的文件。硬盘驱动器有SATA 3总线(600 Mb/s),但我不明白:为什么读取文件的时间只有486毫秒

当我尝试异步读取时,情况会变得更糟——大约需要100-150毫秒

文件没有被缓存——只有当文件实际加载到内存中时,我才能看到RAM消耗增加了800 Mb


请帮帮我,在我看来,这件事很奇怪,当你读取一个文件时,它也会被操作系统复制到文件系统缓存中。如果文件自上次读取后未被修改,并且仍然被缓存,则读取完全由RAM提供。这就是为什么在读取文件一次后,可以完全绕过磁盘进行后续读取

您也不会将缓存视为内存消耗。缓存是整个可用内存,Task Manager也会指出这一点:


它可能不会缓存在应用程序中,但Windows文件系统在Windows缓存管理器中运行自己的内部文件缓存。请参阅:它还可以分配缓冲区,并在异步读取其余缓冲区时向您传递一个句柄。“未缓存”?你确定吗?在任务管理器中观察RAM的使用情况是衡量发生了什么的一种糟糕的方法。如果您多次访问文件,操作系统可能会在内存中保存大部分文件。你的应用程序在冷启动后如何运行?好的,我对文件做了一些改动,重命名了它,它仍然大约为470-490毫秒。你正在对文件执行其他操作,我几乎可以肯定缓存系统已经足够了解这些操作。更改文件并重命名它(不一定)意味着它不再在缓存中。好的,现在第一次尝试读取26 Gb的文件,这肯定超过了RAM,无法缓存-有时读取速度是90 Mb/s,有时低于60 Mb/s