获取大型(160000+内部对象树)对象的副本

时间:2009-07-30 11:47:40

标签: c#

好的,我在内存中缓存了一组非常大的,相同的树(用不相同的数据填充[它们包含有关每个节点内部内容的信息])。

我想复制树的一个实例,并用一组单独的数据填充每个副本。

但是,目前,树的缓存“空白”副本没有被复制,而是简单地引用并填充每一组数据。

如何强制获取缓存空白树的方法返回对象的副本而不是引用?

4 个答案:

答案 0 :(得分:2)

Clone()的替代方法 - 在内存二进制流中序列化它,然后反序列化为新实例。

修改

此外,如果您要考虑序列化,并且性能是您主要关注的问题,请同时考虑以下性能测试Manual Serialization 200% + Faster than BinaryFormatter

答案 1 :(得分:0)

有几种方法,但我建议在树对象上实现ICloneable,然后调用Clone()创建一个深层副本。

答案 2 :(得分:0)

我建议仔细查看您的树类,如果您要强制执行复制语义,那么请使用struct而不是类。否则使用ICloneable接口来提供Clone()方法,如chris166所示。

答案 3 :(得分:0)

对于这么大的树,拥有它的多个副本会产生大量的内存开销。为什么不在每个节点组织数据(例如,使用字典),以便它保存所有不同的数据(就像你现在所得到的那样),但是以一种方便的方式组织你的实际需要? / p>