计划建立一个数据结构,将临时二进制数据存储在内存中进行分析。
数据的最大大小约为10MB
。
数据将一次添加到最后408 bytes
。
没有搜索,检索那些临时二进制数据的操作。
数据将被清除,存储将重新用于下一次分析。
的问题:
byte[10MB], List<bytes>(10MB), List<MyStruct>(24000), or ...?
List.Clear(),
List
的内存将缩小,或者列表的容量(内存)仍然存在,并且在List.AddRange()
之后调用Clear()?
时没有内存分配1}} 答案 0 :(得分:1)
你必须描述你正在做的更多,以提供更好的答案,但听起来你担心效率/性能如此
答案 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,有时比您原先计划的要大一些。
列表的使用速度较慢,内存较大,但它们可以处理各种大小的数据。