【发布时间】:2009-10-13 14:18:20
【问题描述】:
我有这个问题:我有一个大约 2000 字节大的小文件的集合(它们的大小完全相同)并且大约有 100.000 个 em 大约等于 200 兆字节的空间。我需要能够实时选择这些文件中的范围。说文件 1000 到 1100(总共 100 个文件),读取它们并以相当快的速度通过网络发送它们。
好消息是文件将始终按顺序读取,即始终会是“从这个文件和一百多个文件”而不是“这个文件在这里,那个文件在那里等”的范围。 ”。
文件也可以在运行时添加到此集合中,因此它不是固定数量的文件。
我想出的当前方案是这样的:没有文件大于 2000 字节,因此我将拥有一个包含所有其他文件的大文件,而不是在磁盘上分配多个文件,甚至 2048 字节每个 2048 块的前 2 个字节的间隔是下一个 2046 字节中包含的文件的实际字节大小(文件大小在 1800 和 1950 字节之间左右),然后在这个文件中寻找而不是打开一个新文件处理我需要阅读的每个文件。
所以当我需要在位置 X 获取文件时,我将只执行 X*2048,读取前两个字节,然后从 (X*2048)+2 读取字节到前两个字节中包含的大小。这个 200mb 的大文件只会被追加,因此即使在序列化的输入线程/进程(尚未决定)向其追加更多数据时也可以安全读取。
这必须在 Windows 上可行,C 是一个选项,但我更喜欢 C#。
【问题讨论】:
标签: c# .net windows filesystems