内存切片管理和大对象C#

时间:2011-07-17 14:12:43

标签: c# memory memory-leaks memory-management

我有一组存储在Int16类型的3D数组中的图像,我缓存的图像数量最多可达600个或更多图像,这会影响垃圾收集性能的内存性能。 我听说内存切片可以增强内存管理,因为它将子数组元素设置在一个单独的块中 - 在我的情况下,我可以使用记忆瓦片吗? - 如果是,我该如何使用它?

2 个答案:

答案 0 :(得分:3)

  

我可以在我的情况下使用内存平铺吗?

是。 int16 [,,]的3d数组必须是一块内存。把它放入切片中它们已经变小了。 ([] [,])。

其余的取决于您的确切需求。

答案 1 :(得分:1)

垃圾收集将受益于尽可能少收集的东西。多维数组将被视为单个分配:

short[,,] a = new short[2,3,4];

锯齿状数组将使用许多不同的分配。它的分配大小可能要快得多,但在收集过程中可能会给GC带来更大的压力:

short[][][] a = new short[2][][];

我之前从未听说过“记忆平铺”,如果你能解释那是什么,我可能会更好地回答你的问题。