gpt4 book ai didi

c# - 高性能克隆

转载 作者:太空狗 更新时间:2023-10-29 19:44:30 26 4
gpt4 key购买 nike

我正在寻找一种以高效方式深度克隆对象图的方法。我将让多个线程以极快的速度克隆一个图,这样它们就可以玩一些状态,如果结果不有趣就扔掉,返回原来的状态再试一次。

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

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

最佳答案

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

  • 坚持序列化,但对其进行自定义。如果您想以声明方式对内容进行分类并且很可能会获得性能提升,这可能会很有用。
  • 基于反射的物体行走,结合 IL 发射器,例如 Fasterflect .
  • 代码生成或通过相互分配属性来编写您自己的克隆代码(我们有一些旧代码使用我们称之为复制构造函数的东西,获取自身的实例并手动复制属性/字段) .

我们有一些代码实例,我们在其中控制二进制序列化,以便我们可以序列化内部 GUID 表(我们有很多重复的 GUID 并通过 .NET Remoting 序列化非常大的列表)。它对我们来说效果很好,我们不需要第三方序列化框架,但是,它是带有一点代码生成的手工制作的东西。

CSLA.NET framework具有一个名为 UndoableBase 的类,它使用反射来序列化属性/字段值的 Hashtable。用于允许回滚内存中的对象。这可能符合您的“返回原始状态再试一次”的句子。

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

关于c# - 高性能克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com