我正在寻找一种以一种高效的方式深度克隆对象图的方法。我将让多个线程以极快的速度克隆一个图,这样它们就可以处理某些状态,如果结果不有趣,就丢弃它们,然后返回到原始状态重试。
我目前正在通过二进制序列化使用深度克隆,虽然它可以工作,但速度并不快。我见过其他库,比如protobuf,但我的对象图中的类可能是在外部程序集中定义的,继承自主程序集中的类,如果可能的话,我不希望在那些使用程序集的程序集中添加任何复杂性。
我遇到的一件有趣的事情就是使用automatically generated IL进行克隆。它似乎还没有完全完成,我已经发布了看看作者是否对它做了更多的工作,但我猜没有。还有没有人开发或看到过通过IL进行深度克隆的更全功能的方法?或者另一种更快的方法?
发布于 2011-08-19 23:01:25
除了序列化,我只考虑了三个选项:
我们有一些控制二进制序列化的代码实例,这样我们就可以序列化一个互联的GUID表(我们有很多重复的GUID,并通过.NET远程处理序列化非常大的列表)。它对我们来说工作得很好,我们不需要第三方序列化框架,然而,它是手工制作的东西,有一点代码生成。
CSLA.NET framework提供了一个名为UndoableBase的类,该类使用反射来序列化属性/字段值的Hashtable。用于允许对内存中的对象进行回滚。这可能与你的“返回原文重试”的句子相吻合。
就我个人而言,我会进一步研究基于反射的解决方案(最好使用发出的IL以获得更好的性能),这样就可以利用类/成员属性来控制克隆过程。如果性能是王道,这可能不会减少它。
https://stackoverflow.com/questions/7123452
复制相似问题