哪种数据结构适合临时大二进制数据存储?

时间:2010-07-30 17:51:59

标签: c# .net

计划建立一个数据结构,将临时二进制数据存储在内存中进行分析。

数据的最大大小约为10MB

数据将一次添加到最后408 bytes

没有搜索,检索那些临时二进制数据的操作。

数据将被清除,存储将重新用于下一次分析。

的问题:

  1. 哪种结构有利于此目的? byte[10MB], List<bytes>(10MB), List<MyStruct>(24000), or ...?
  2. 如何快速清除List或数组中的数据(不是List.Clear(),只是将值设置为0)?
  3. 如果我说List.Clear(), List的内存将缩小,或者列表的容量(内存)仍然存在,并且在List.AddRange()之后调用Clear()?时没有内存分配1}}
  4. List.Insert()会使List更大还是只替换现有项?

3 个答案:

答案 0 :(得分:1)

你必须描述你正在做的更多,以提供更好的答案,但听起来你担心效率/性能如此

  1. 字节[]
  2. 无需清除阵列,只需跟踪当前周期的“结束”
  3. N / A
  4. N / A

答案 1 :(得分:0)

using (System.IO.MemoryStream memStream = new System.IO.MemoryStream())
{
    Do stuff
} // the using ensures proper simple disposal occurs here so you don't have to worry about cleaning up.

答案 2 :(得分:0)

如果您的数据通常大小相同,并且总是在一定大小下,请使用字节数组。

创建一个byte []和一个int,让你知道该缓冲区的“完整”部分的结尾停止在哪里,“free”部分开始。你永远不需要清除它;只是覆盖那里的东西。唯一的问题是,如果您的数据有时是100 kb,有时是10 MB,有时比您原先计划的要大一些。

列表的使用速度较慢,内存较大,但它们可以处理各种大小的数据。