かなり大きなオブジェクトを何度も複製する必要があり、私はそれを行うより速い方法を見つけています。オブジェクトを複数回クローンする最も速い方法は何ですか
今私は、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);
}
誰もが任意のアイデアを持っていますか?
UPDATE:
私はMyClass
を変更する必要はありません。だから私はバイナリのシリアル化を使用しています。だからMyClass.Clone
は現在解決策ではありません。
UPDATE 2:
私もMyClass
またはそれらの特性に触れたくありません。だから手動でプロパティのコピーは私が探している方法ではありません。
あなたのオブジェクトは、あなたが提案するほど大きい場合、このソリューションは、クローン操作を実行するために多くのメモリとほぼ3倍必要になることに注意してください。 OriginalObject + MemoryStream + CloneObjectです。おそらく、必要なフィールドを手動でクローンすることによって、より高速なパフォーマンスとより良いメモリ使用率を得ることができます。 –
@BradleyUffnerはい、そうです。しかし、私は今は 'MyClass'を変更するのが好きではないでしょう – Alexander
その後、シリアライゼーションサロゲートをチェックしてください。元のクラスを変更せずに手動でバイナリのシリアル化を行うことができます。それはちょっと複雑な思考かもしれません –