4

C# で参照型のサイズを見つける方法があるかどうか疑問に思っていました。私はいくつかのグーグルを行いましたが、フォーラムに関する一般的な考えは、これは不可能であるようです。皆さんに聞いてみて、ここに詳しい人がいないかどうか確認してみようと思いました。

結局のところ、プロファイリング ツールにはこれを行う方法が必要なのでしょうか? この情報を知る必要があるのは通常ではありませんが、あると便利な場合があります。

4

2 に答える 2

2

うーん。私はプロファイリングツールを使用していましたが、次のようなものがうまくいくと思います:

long before = System.GC.GetTotalMemory(true);
Foo instance = new Foo();
long after = System.GC.GetTotalMemory(true);
long consumed = after - before;
于 2009-05-14T10:06:26.867 に答える
0

大まかな見積もりを行うことができ、profilig を介して使用メモリを追跡することもできるはずです。ただし、JIT には、フレームワークのバージョン、マシンの構成 (特に 32 ビットと 64 ビット)、フレームワーク プロバイダー (MS、Mono、GNU.NET など) に応じて、最適な型のレイアウトを自由に設定できます。等

事前に計算すると、次のようになります。

  • 参照は、プラットフォームに応じて 32 ビットまたは 64 ビットです。

  • クラス インスタンスには、型情報 (VTable などを含む) への内部参照、含まれる各参照型 (文字列または配列を含む) への参照、および構造体によって使用されるメモリ (これらは、アクセスできるようにレイアウトされる場合があります) があります。効率的であり、実際には一部のメモリを未使用のままにします)。

したがって、問題は、クラスまたはクラスと関連データ (フィールド内の文字列、配列、リスト、辞書など) によって使用されるメモリを取得したいですか?

于 2009-05-14T10:04:16.933 に答える