首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高性能克隆

高性能克隆
EN

Stack Overflow用户
提问于 2011-08-19 22:57:01
回答 1查看 1.6K关注 0票数 8

我正在寻找一种以一种高效的方式深度克隆对象图的方法。我将让多个线程以极快的速度克隆一个图,这样它们就可以处理某些状态,如果结果不有趣,就丢弃它们,然后返回到原始状态重试。

我目前正在通过二进制序列化使用深度克隆,虽然它可以工作,但速度并不快。我见过其他库,比如protobuf,但我的对象图中的类可能是在外部程序集中定义的,继承自主程序集中的类,如果可能的话,我不希望在那些使用程序集的程序集中添加任何复杂性。

我遇到的一件有趣的事情就是使用automatically generated IL进行克隆。它似乎还没有完全完成,我已经发布了看看作者是否对它做了更多的工作,但我猜没有。还有没有人开发或看到过通过IL进行深度克隆的更全功能的方法?或者另一种更快的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-19 23:01:25

除了序列化,我只考虑了三个选项:

  • 坚持使用序列化,但可以对其进行自定义。如果您希望以声明方式绑定内容,并且结合使用IL发射器(如Fasterflect.
  • Code-gen )或通过将属性分配给彼此来编写您自己的克隆代码,那么这可能非常有用(我们有一些旧代码使用我们称之为复制构造函数的方法,获取自身的实例并手动复制属性/字段)。

我们有一些控制二进制序列化的代码实例,这样我们就可以序列化一个互联的GUID表(我们有很多重复的GUID,并通过.NET远程处理序列化非常大的列表)。它对我们来说工作得很好,我们不需要第三方序列化框架,然而,它是手工制作的东西,有一点代码生成。

CSLA.NET framework提供了一个名为UndoableBase的类,该类使用反射来序列化属性/字段值的Hashtable。用于允许对内存中的对象进行回滚。这可能与你的“返回原文重试”的句子相吻合。

就我个人而言,我会进一步研究基于反射的解决方案(最好使用发出的IL以获得更好的性能),这样就可以利用类/成员属性来控制克隆过程。如果性能是王道,这可能不会减少它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7123452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档