在类中包装Byte []以减少内存开销

时间:2010-02-15 09:43:44

标签: c# .net clr

我在应用程序中传递了大量数据作为byte []对象。在很多情况下,这也是存储问题。如果我在像

这样的类中包装byte []怎么办?

[序列化] 公共类MyClass {   public byte [] Data {get;组; } }

你们是否认为我会获得任何性能becoz现在引用类型将传递而不是值类型,因此数据不必每次都被复制。

期待您的回答

4 个答案:

答案 0 :(得分:13)

为什么要改进?它只能让事情变得更糟。 byte[]本身就是引用类型,而不是值类型。效果将是该类的一个不必要的间接和堆分配级别。

答案 1 :(得分:1)

您是否尝试过内存分析工具以找出内存泄漏的位置?

如果您使用dotTrace之类的工具来创建实际的内存配置文件,然后找到程序的哪些部分正在占用内存,我认为您可以更轻松地识别您的问题。

这是你唯一能找到解决记忆问题的真正解决方案的方法。

答案 2 :(得分:0)

由于字节数组仍然存在,因此无关紧要。

但是,如果你愿意为内存牺牲性能,我建议你确实将你的字节数组包装在一个对象中,但是将数组本身保存在磁盘上,只在需要时才读取它。即proxy个对象。

当然,这取决于您的应用程序以及如何使用字节。例如,如果客户端只需要部分数据,您甚至可能不需要加载整个数组。

答案 3 :(得分:0)

正如Mehrad Afshari已经指出的那样,byte []已经是一种引用类型。

考虑:

您应该检查您是否在适当的时候引用相同的实例(即确保您没有多次反序列化实例以进行只读访问),并且您可能希望在适当的情况下实施一些压缩。还要考虑是否可以将数组划分为更小的块并按顺序对它们进行操作。