我需要多次克隆相当大的对象,并且我正在寻找更快的方法来完成它。几次克隆对象的最快方法是什么
现在我使用BinaryForamter
到MemoryStream
的序列化。因此,这里是我想用的功能,我只是讲(DeserializeToList
的方法,我在寻找):
var originalObject = new MyClass();
var objectClones = new List<MyClass>();
var cloneCount = 10;
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, originalObject);
stream.Seek(0, SeekOrigin.Begin);
objectClones = (MyClass)formatter.DeserializeToList(formatter, cloneCount);
}
没有任何人有什么想法?
更新:
我不想改变MyClass
。这就是我使用二进制序列化的原因。所以MyClass.Clone
现在不是解决方案。
更新2:
我不想连碰MyClass
或它们的属性。所以手动属性复制不是我期待的方式。
如果你的对象是你的建议一样大,记住,这个解决方案将需要大约3倍的内存来执行克隆操作。 OriginalObject + MemoryStream + CloneObject。通过手动克隆所需的字段,您可能会获得更快的性能和更好的内存利用率。 –
@BradleyUffner是的,没错。但是现在我不想改变'MyClass' – Alexander
然后检查序列化代理。它允许您在不修改原始类的情况下执行手动二进制序列化。它可以是一个复杂的想法 –