ホームページ > バックエンド開発 > C++ > C# オブジェクトのバイト サイズを推定するにはどうすればよいですか?

C# オブジェクトのバイト サイズを推定するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-10 15:37:47
オリジナル
287 人が閲覧しました

How Can I Estimate the Byte Size of C# Objects?

C# オブジェクト インスタンスのバイト サイズの推定

質問:

オブジェクト インスタンス (コレクション、組み合わせ、個々のオブジェクトを含む) のサイズを決定することは、オブジェクト サイズを管理する際の一般的なタスクです。

解決策:

正式な方法はありませんが、リフレクションと文書化されていない .NET 内部を利用してオブジェクト サイズを推定できます。

<code class="language-csharp">object obj = new List<int>();
RuntimeTypeHandle th = obj.GetType().TypeHandle;
int size = *(*(int**) &th + 1);
Console.WriteLine(size);</code>
ログイン後にコピー

説明:

  • RuntimeTypeHandle 型の内部表現へのアクセスを提供します。
  • ポインター操作を通じて、「ベース インスタンス サイズ」フィールドを取得して、オブジェクト サイズを推定できます。
  • コレクションや複雑なオブジェクトの場合、含まれる要素のサイズを再帰的に推定する必要がある場合があります。

制限事項:

  • このメソッドは文書化されていない内部メカニズムに依存しているため、将来の .NET 更新によって影響を受ける可能性があります。
  • すべての型 (配列、文字列、StringBuilder など) のオブジェクト サイズが正確に反映されていない可能性があります。
  • これは推定値のみを提供するため、実際のメモリ使用量は異なる場合があります。

拡張メソッド:

便宜上、サイズの取得を簡素化するために Object クラスに拡張メソッドを実装することを検討できます。

<code class="language-csharp">public static int GetEstimatedByteSize(this object obj)
{
    RuntimeTypeHandle th = obj.GetType().TypeHandle;
    return *(*(int**) &th + 1);
}</code>
ログイン後にコピー

この拡張メソッドは注意して使用する必要があり、すべてのタイプとシナリオで正確であることが保証されていないことに注意してください。

以上がC# オブジェクトのバイト サイズを推定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート