【发布时间】:2017-02-03 17:37:06
【问题描述】:
我需要多次克隆相当大的对象,我正在寻找更快的方法。
现在我使用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 倍的内存来执行克隆操作。原始对象 + 内存流 + 克隆对象。通过手动克隆所需的字段,您可能可以获得更快的性能和更好的内存利用率。
-
@BradleyUffner 是的,没错。但我暂时不想更改
MyClass -
然后检查序列化代理。它允许您在不修改原始类的情况下进行手动二进制序列化。这可能是一个有点复杂的想法
-
@BradleyUffner 你能解释一下你建议如何使用序列化代理
标签: c# deserialization cloning