c# – 更快的克隆

有人想要一个框架/类,允许我通过值.Net对象克隆。我只对公共读/写属性(即DataContracts)感兴趣,我不在乎引用是否被正确解析(即,包含相同的项目实例的collecions两次)。

我通过DataContractSerializer(序列化到XML和返回)尝试了序列化技巧,写了基于反射的克隆类(有时更快/有时更慢),并且想知道是否有人写了一个可以通过Emit而不是反射来执行此帮助的类。至于现在发射的IL对我的小脑有点多,但是我想这将是最终的解决方案。除非有人知道比DataContractSerializer更快的替代方法。

最佳答案
如果你在谈论一个对象树/图表:

编写特定的IL以序列化对象是棘手的。 IMO,最好的方法是查看一个完整的序列化,就像DataContractSerializer的工作方式一样 – 但不一定是引擎。

例如,protobuf-net具有Seri​​alizer.DeepClone< T>可能有帮助的方法。至少应该比DataContractSerializer更快。目前,您需要为序列化程序添加一些线索(即使只是[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)])) – 但是,当前(未完成)正在进行的工作提供没有属性的POCO支持。

如果你在谈论个别对象:

在.NET 3.5中使用Expression可以做到这些相当简单的事情;基于反射构建动态表达式,并调用.Compile()。 MiscUtil已经有:

DestType clone = PropertyCopy<DestType>.CopyFrom(original);

使用.NET 2.0 / 3.0(无表达式),您可能会考虑使用HyperDescriptor进行类似的操作。

转载注明原文:c# – 更快的克隆 - 代码日志