好的,我在内存中缓存了一组非常大的,相同的树(用不相同的数据填充[它们包含有关每个节点内部内容的信息])。
我想复制树的一个实例,并用一组单独的数据填充每个副本。
但是,目前,树的缓存“空白”副本没有被复制,而是简单地引用并填充每一组数据。
如何强制获取缓存空白树的方法返回对象的副本而不是引用?
答案 0 :(得分:2)
Clone()的替代方法 - 在内存二进制流中序列化它,然后反序列化为新实例。
修改强>
此外,如果您要考虑序列化,并且性能是您主要关注的问题,请同时考虑以下性能测试Manual Serialization 200% + Faster than BinaryFormatter。
答案 1 :(得分:0)
有几种方法,但我建议在树对象上实现ICloneable
,然后调用Clone()
创建一个深层副本。
答案 2 :(得分:0)
我建议仔细查看您的树类,如果您要强制执行复制语义,那么请使用struct
而不是类。否则使用ICloneable
接口来提供Clone()方法,如chris166所示。
答案 3 :(得分:0)
对于这么大的树,拥有它的多个副本会产生大量的内存开销。为什么不在每个节点组织数据(例如,使用字典),以便它保存所有不同的数据(就像你现在所得到的那样),但是以一种方便的方式组织你的实际需要? / p>