<分区>
我正在使用代码项目中的函数来深度克隆我的对象
http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx?msg=3984032#xx3984032xx
但是对于性能敏感的应用程序,我的性能损失大约是执行时间的 10%。
有人可以向我推荐另一种创建对象副本并降低性能损失的方法吗?我的对象非常大,包含对象列表,对象列表又包含对象列表等。
谢谢,
约瑟夫
<分区>
我正在使用代码项目中的函数来深度克隆我的对象
http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx?msg=3984032#xx3984032xx
但是对于性能敏感的应用程序,我的性能损失大约是执行时间的 10%。
有人可以向我推荐另一种创建对象副本并降低性能损失的方法吗?我的对象非常大,包含对象列表,对象列表又包含对象列表等。
谢谢,
约瑟夫
最佳答案
我可以推荐几种方法,但它们实现起来不一定 super 简单。我个人会选择的两种方法是:
使用 T4 等代码生成来生成克隆对象图的代码。 T4 是 Visual Studio 2008 和 Visual Studio 2010 的一部分,Oleg Sych 有一些很棒的 T4 文档:http://www.olegsych.com/2007/12/text-template-transformation-toolkit/
使用 System.Linq.Expression 在运行时生成克隆对象的委托(delegate)。由于 GetValue/SetValue,一般来说反射很慢。然而,System.Linq.Expression 允许您从反射中生成针对您的类“硬编码”的方法。然后您缓存这些方法,因此只需为反射付出一次代价。
这两种方法的性能应该与您手动编写深度克隆逻辑的性能相当。
使深度克隆的生活复杂化的事情:
编写一个成熟的深度克隆程序有点棘手,但由于您了解自己的领域,您或许可以对问题进行一些简化。
附言。我个人更喜欢 T4 而不是 System.Linq.Expression,因为它不那么“神奇”
关于c# - 深度克隆一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6964800/