【问题标题】:IO Reads for the File C#文件 C# 的 IO 读取
【发布时间】:2013-04-16 07:34:53
【问题描述】:

我正在从指定路径读取所有文件(大约 3000 个文件,大小为 50 GB),一次读取 4k 字节。下面是相同的代码。我的问题是当我在任务管理器中看到应用程序的 CPU 和内存时,我可以看到 IO 读取逐渐增加到高水平,我可以理解这可能是因为 4k 读取,但这是否会影响其他事情或其ok 增加IO Read。 FileStream 是否也是读取文件的最佳方式,因为它不会将整个文件加载到内存中?

fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)

do
{
   BytesRead = fileStream.Read(Buffer, 0, MAX_BUFFER);
}
while (BytesRead != 0);

fileStream.Close();

【问题讨论】:

  • 这里使用的C#版本?
  • 我对这里的问题感到困惑。不进行大量 IO 就无法读取 50GB 的数据……你想问什么?

标签: c# file-io


【解决方案1】:

查看Hans Passant's answer关于这个问题,我觉得很清楚。

文件已经被文件系统缓存缓冲了,你只需要 选择一个不强制 FileStream 生成本机的缓冲区大小 Windows ReadFile() API 调用过于频繁地填充缓冲区。不要去 低于 1 KB,超过 16 KB 是浪费内存。

也可以看看this post,它提供了一些基准代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2017-02-10
    • 2013-12-11
    • 2021-03-24
    • 2017-05-25
    • 2012-04-09
    相关资源
    最近更新 更多