3

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

  1. 第一个文件 - 分配表。

它存储有关文件分配的信息(实际上它不是文件但不关心它)

每条记录具有以下结构:

  1. 名称 - 固定大小(100 字节)。前 4 个字节是字符串长度
  2. 长度 - 4 个字节,文件的总长度
  3. StartCluster - 起始集群的 4 字节 id
  4. EndCluster - 端簇的 4 字节 id

每个条目都有固定的大小,我在内存中有哈希表,这可以帮助我找到每个条目的位置。

  1. 第二个文件 - 虚拟驱动器

基于集群的 VD。每个集群都有固定的大小 - 256 字节。最后 4 个字节是指向文件链中下一个簇的指针。

当我尝试读取所有文件时,问题是速度非常慢。我怎样才能提高性能?有什么技巧可以快速从硬盘读取。

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

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

4

1 回答 1

2

一些选项;

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

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

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

  • 您似乎确信这是一个磁盘读取问题。您是否检查过您在阅读文件后对文件所做的操作不是慢的部分?

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

于 2012-08-13T12:33:16.747 回答