私はISerializableを実装するシリアライズ可能なクラス(Aと呼ぶ)を持っています。C#逆シリアル化のO(n * n)の動作?
これらをアレイ(配列)でシリアル化すると、デシリアライゼーションで約1.3GBの最大VMサイズが必要となり、170MBのディスクイメージが250MBの最終VMサイズに読み込まれます。これには約5分(経過時間)、4:20分(CPU時間)かかる。
上記の11K個のオブジェクトのそれぞれを同じファイル(カウントインジケータとともに)に個別にシリアル化すると、デシリアライゼーションには最大250 MBのVMサイズが必要で、わずかに小さいディスクイメージ(160 MB) VMサイズ。これには約35秒(経過時間)、20秒(CPU時間)かかる。
なぜでしょうか?奇妙に思える。上記の両方のケースでは、バイナリのシリアル化が使用されます。
P.S.関連がある場合は、一連のシリアル化可能オブジェクトがインスタンスに含まれます。これらのシリアル化オブジェクトは、それぞれ、ISerializableを実装するクラスのインスタンスです。
O(n個の* n)がより一般的にはO(n^2)すべての –
まず、メモリを使用するように表されますプロファイラを使用し、非常に特殊なケースで原因を特定してください。一般的に伝えるのは難しいです。 –
はい、私はそれをしたいと思います。現在のところ、プロファイラはありません。 – Akil