MemberwiseClone(Object fromObject, Object toObject)
这是我一生中想多次使用的功能。与 MemberwiseClone 的当前实现相比,它具有巨大的优势,因为它不会产生任何垃圾。
例如,假设您有一个包含 1000 个对象的数组,并且您想要遍历并测试调用 SomeFunction() 对对象的影响,而不会破坏原始对象。在科学模拟领域相当普遍。
如果您使用 MemberwiseClone 的现有实现,您将创建 1000 个垃圾对象。如果我建议的方法存在,您可以创建 1 个对象并将其重用于所有迭代。这显然为 GC 创造了更少的垃圾和更少的工作。我无法想象该方法的实现会与原始方法有那么大的不同,所以我猜它几乎不需要时间来添加到框架中。
虽然完全可以为逐字段复制的对象维护 GetCopy() 方法,但这样做有两个问题。首先,它必须得到维护。每当添加新字段时,如果您忘记将其添加到 GetCopy,您的程序就会损坏。其次,对于大型对象,它比复制内存块的效率要低得多。
我不得不求助于在我的对象中嵌入结构来存储所有字段,然后我不需要记住将它们添加到 GetCopy 方法中,我可以通过一次分配将它们全部复制。这样做的问题是它使代码非常难看。
那么,这种方法从未实施过有充分的理由吗?还是它没有我想象的那么有用。