Google と StackOverFlow を検索すると、この質問への参照がたくさん出てきます。たとえば、次のとおりです。
したがって、最初に、正確な測定値を取得することは一般的に不可能であることを理解していると言わせてください. しかし、私はそれについてそれほど心配していません - 私は絶対的ではなく相対的な価値を与えるものを探しています. したがって、それらがどちらか一方に少しずれていても問題ありません。
複雑なオブジェクト グラフがあります。これは、子供を持つ可能性のある子供を持つ単一の親 (T) で構成されています。グラフ内のすべてのオブジェクトは、同じ基本クラスからのものです。子はリスト T の形式です。
サイズを計算するために、シリアル化方法と安全でない方法の両方を試しました。彼らは異なる答えを出しますが、「相対的な」問題はどちらの場合も同じです。
親オブジェクトのサイズは、子のサイズの合計よりも大きいと仮定しました。これは正しくないことが判明しました。親のサイズを計算しました。次に、子供のサイズを合計します。場合によっては、これは理にかなっているように見えましたが、他の場合には、子の合計が親に対して決定されたサイズをはるかに超えていました。
だから私の質問は、オブジェクトをシリアル化すると、子の合計よりも小さいサイズになる可能性があるという私の単純な仮定はなぜですか。私が思いついた唯一の答えは、シリアル化された各オブジェクトには固定のオーバーヘッドがあり (自明だと思います)、これらの合計が親の「独自のサイズ」を超える可能性があるということです。もしそうなら、私がそれを考慮できるように、そのオーバーヘッドが何であるかを判断する方法はありますか?
ご提案いただきありがとうございます。
編集 申し訳ありませんが、すべてのオブジェクトがシリアル化可能とマークされていると言うのを忘れていました。シリアル化方法は次のとおりです。
var bf = new BinaryFormatter();
var ms = new MemoryStream();
bf.Serialize(ms, testObject);
byte[] array = ms.ToArray();
return array.Length;