【发布时间】:2012-07-09 14:06:30
【问题描述】:
我已经基于两个文件创建了一个虚拟文件系统(非常类似于 fat)。
- 第一个文件 - 分配表。
它存储有关文件分配的信息(实际上它不是文件但不关心它)
每条记录的结构如下:
- 名称 - 固定大小(100 字节)。前 4 个字节是字符串长度
- 长度 - 4 个字节,文件总长度
- StartCluster - 起始集群的 4 字节 id
- EndCluster - 结束簇的 4 字节 id
每个条目都有固定的大小,我在内存中有哈希表,可以帮助我找到每个条目的位置。
- 第二个文件 - 虚拟驱动器
基于集群的 VD。每个集群都有固定的大小 - 256 字节。最后 4 个字节是指向文件链中下一个簇的指针。
当我尝试读取所有文件时,问题是速度非常慢。我怎样才能提高性能?有什么快速从硬盘读取的技巧吗?
例如:按大块读取文件是个好主意吗?当我读取文件的一小部分时,文件被操作系统缓存对吗?下一次我只是从内存而不是从 HD 中获取数据?
我有几个这样的问题可以在哪里得到答案?
【问题讨论】:
-
你看过内存映射文件吗?
-
如果块大小等于给定 CPU/OS 上的内存页面大小,则可以改进磁盘访问。
-
@leppie 我的第二个文件非常零散。所以我经常需要随机搜索阅读。 mmf 可以帮我吗?
-
你说读取所有文件时速度慢。那么只读取一个文件很快吗?
-
“慢”有多慢?您期望的时机是什么,现实情况如何?
标签: c# performance io