从硬盘快速读取

时间:2012-07-10 06:05:48

标签: c# performance io

我已经基于两个文件创建了一个虚拟文件系统(非常类似于胖)。

  1. 第一个文件 - 分配表。
  2. 它存储有关文件分配的信息(实际上它不是文件但不关心它)

    每条记录都有以下结构:

    1. 名称 - 固定大小(100字节)。前4个字节是字符串长度
    2. 长度 - 4个字节,文件总长度
    3. StartCluster - 启动集群的4个字节ID
    4. EndCluster - 结束群集的4个字节ID
    5. 每个条目都有固定的大小,我在内存中有哈希表,这有助于我找到每个条目的位置。

      1. 第二个文件 - 虚拟驱动器
      2. VD基于集群。每个群集都有固定大小 - 256个字节。最后4个字节是指向文件链中下一个簇的指针。

        当我试图读取所有文件时,问题是速度非常慢。我怎样才能提高性能?有没有快速阅读硬盘的提示。

        例如:用大块读取文件是个好主意吗?当我甚至阅读文件的一小部分时,操作系统会缓存文件吗?在下一次我只是从内存而不是从HD获取数据?

        我有几个这样的问题,我可以得到答案吗?

1 个答案:

答案 0 :(得分:2)

一些选项;

  • 您可以扩大群集大小(256字节很小,大多数操作系统现在使用4KB +用于群集)

  • 如果您阅读了所有文件,则可以根据startCluster进行排序,以便按照磁盘上彼此物理接近的顺序读取文件。因此,每当操作系统获取4K +块时,您更可能需要使用下一个文件的其他部分。

  • 您可以对虚拟磁盘文件进行碎片整理

  • 您似乎确信这是一个磁盘问题。你刚刚读完文件后,你是否检查过你对文件的处理不是很慢?

  • 很多随机访问是SSD存储的亮点。将虚拟磁盘移动到SSD