用C#写入内存高效的随机访问文件

时间:2016-11-01 09:55:04

标签: c# file-writing

因此我们有许多具有自定义文件格式的文件。然后处理这些文件以基于该内容生成新文件。例如,考虑处理.zip文件。

正在按顺序读取文件并根据内容创建一些内容。

例如,按顺序阅读可能会产生以下结果:

  • 第一个字节:' S'在索引#0 =' S'
  • 第二个字节:' U'在索引#0 ='美国'
  • 第三字节:' C'在索引#0 =' CUS'
  • 第4个字节:' B'在索引#0 =' BCUS'
  • 第5个字节:' A'在索引#0和索引#2 =' ABACUS'

值得注意的几点:

  • 文件内容往往从结果文件的末尾开始,直到开始 - 但情况并非总是如此。
  • 向后阅读文件 - 我认为 - 不是一个选项,因为这会搞乱索引
  • 无法事先确定结果文件长度 - 除非读取并解析文件的全部内容
  • 索引可能会跨越整个文件范围。
  • 事先无法知道 B BC BCUS 之间的实例之间存在空格,后面填充以 ABACUS

目前,我将结果内容写入内存中List<byte>;,然后将结果写入文件。这并不理想,因为这意味着整个结果文件被加载到内存中。

我做了一些检查并发现了C#中的MemoryMapping,乍一看似乎是一个好主意但是从我所见过的1)它需要事先知道文件长度和2)它没有支持用于在指定索引处插入字节 - 同时将任何现有内容推送到相邻字节。

我还在考虑将数据的比特(作为块)存储,例如每1MB的文件内容在处理时作为单独的文件存储。但是由于写入的随机访问性质以及可能跨越文件的整个长度,我认为在打开/关闭文件和重新读取数据方面会有很多文件I / O.

您对如何有效地执行此操作有任何想法吗?

0 个答案:

没有答案