ガベージコレクションのためにキューに入れられたオブジェクトの総数をカウントする

クリシック

OpenGLゲームに小さなデバッグUIを追加したかったのですが、これはさまざまなデバッグオプション/出力表示で頻繁に更新されます。私が欲しかったのは、ガベージコレクターの各世代のアクティブオブジェクトを表示する定数カウンターでした。名前などは必要ありません。合計数だけです。ゲーム内で特定のことをするときに目が離せないもの。

しかし、私の問題は、さまざまな世代で現在生きているオブジェクトの総数を数える方法が見つからないように見えることです。

すべてのコンストラクター内でインクリメントされ、クラスファイナライザー内でデクリメントされるグローバル静的フィールドを保持することも検討しました。ただし、これには、前述の機能をすべてのクラスに手動でコーディングする必要があり、「世代ごとの合計」の問題は解決されません。

私がこれをどうやってやるのか知っていますか?

stakx-貢献しなくなりました

(質問のタイトル:) 「ガベージコレクションのためにキューに入れられたオブジェクトの総数を数える」

(質問の本文から:) 「しかし、私の問題は、さまざまな世代で現在生きているオブジェクトの総数を数える方法が見つからないように見えることです。

備考:質問のタイトルと本文は反対のことを求めています。タイトルでは、GCルートを介して到達できなくなったオブジェクトの数を求めていますが、本文では、「ライブ」オブジェクト、つまり、GCルートを介して到達できるオブジェクトの数を求めています。 。

基本的に.NETのオブジェクトは参照カウントされないため、これを行う方法がない可能性があることから始めましょう。そのため、オブジェクトへの最後の参照が消えたり消えたりしても、すぐに「不要」としてマークすることはできません。スコープの。.NETのマークアンドコンパクトガベージコレクターは、どのオブジェクトが生きていて、実際のガベージコレクション中(「マーク」フェーズ中)に再利用できるかのみを検出する思いますただしこの情報は事前に、つまりGCが発生する前に必要なようです

そうは言っても、ここにおそらくあなたの最良の選択肢があります:

  1. おそらく、.NETのマネージドフレームワーククラスライブラリでの最善の策は、パフォーマンスカウンターです。ただし、適切なカウンターが利用できるようには見えません。さまざまなGC世代で割り当てられたバイト数を示すパフォーマンスカウンターがありますが、ライブ/デッドオブジェクトの数のカウンターはありません。

  2. あなたは可能性も見撮りたいCLRの(つまり、実行時の)管理されていない、COMベースのデバッグAPIをICorDebugProcess5インターフェイスを取得した場合、次のメソッドが役立つ可能性があります。

    「プロセスでガベージコレクションされるすべてのオブジェクトの列挙子を取得します。」

    参照してくださいこの回答へのSO上で同様の質問を

    これは、ライブオブジェクトではなく、ガベージコレクションされるオブジェクトに関するものであることに注意してください。

    「現在列挙可能かどうかなど、ガベージコレクションヒープに関する一般的な情報を提供します。」

    管理ヒープ列挙可能であることが判明した場合、次を使用できます…

    「マネージヒープ上のオブジェクトの列挙子を取得します。」

    この列挙子によって返されるオブジェクトは、次のタイプです。

    「マネージヒープ上のオブジェクトに関する情報を提供します。」

    これらの詳細には実際には興味がないかもしれませんが、列挙子によって返されるオブジェクトの数だけに興味があるかもしれません。

    (私はこのAPIを自分で使用していません。おそらく、より優れた、より効率的な方法があります。)

  3. 2015年9月、MicrosoftはGitHubでclrmd別名Microsoft.Diagnostics.Runtimeと呼ばれるマネージドライブラリを公​​開しましたこれは、上記のアンマネージデバッグAPIと同じ基盤に基づいています。プロジェクトには、GCヒープ内のオブジェクトの列挙に関するドキュメントが含まれています

ところで。ベンワトソンによる非常に有益な本「WritingHigh-Performance.NET Code」があります。これには、.NETメモリ割り当てとGCをより効率的にする方法に関する確かなヒントが含まれています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

RavenDBのドキュメント全体でコレクション内のオブジェクトの総数を取得するためのインデックスを作成するにはどうすればよいですか?

分類Dev

ガベージコレクションされたオブジェクトの統計を取得するにはどうすればよいですか?

分類Dev

Javaでガベージコレクションされたオブジェクトを確認する方法は?

分類Dev

Javaでガベージコレクションされたオブジェクトを確認する方法は?

分類Dev

カスタムキーによるMongoDBクエリコレクションと制限付きのネストされたオブジェクトを返す

分類Dev

別のスレッドのワーカーオブジェクトのQtキューに入れられた終了イベント

分類Dev

コレクションを配列オブジェクトに変換するためのこれら2つのアプローチの違い

分類Dev

リンクされたオブジェクトのガベージコレクション

分類Dev

ClassLoaderによって作成されたオブジェクトにガベージコレクションの機会がないのはなぜですか

分類Dev

オブジェクトをオブジェクト内からガベージコレクションの対象にする方法は?

分類Dev

GC(ガベージコレクター)によるガベージコレクションのオブジェクトをマークする方法

分類Dev

.netガベージコレクターがオブジェクトを次世代に移動するのに必要なコレクションの数

分類Dev

ガベージコレクションを適切に処理し、カスタムオブジェクトポインタのコレクションを使用してメモリリークを回避するにはどうすればよいですか?

分類Dev

構成されたオブジェクトのガベージコレクション

分類Dev

ガベージコレクションのためにオブジェクトを作成しないようにすることは、それでも意味がありますか?

分類Dev

非静的メソッドで定義された変数は、オブジェクトとともにガベージコレクションされますか

分類Dev

どのようにガベージコレクションは孤立したオブジェクトを識別するのでしょうか?

分類Dev

MongoDBPHPのコレクション内のドキュメント内にネストされたオブジェクト値を取得する方法

分類Dev

文字列のコレクションから結合されたオブジェクトのコレクションを作成するためのLINQクエリ

分類Dev

実際のオブジェクトがガベージコレクションされている場合、WeakHashMapのエントリの値はどのようにしてガベージコレクションされますか?

分類Dev

引数として渡され、メソッドでnullに設定されているオブジェクトのガベージコレクション

分類Dev

ガベージコレクションではなく、ループの反復ごとに辞書属性が追加されたPythonオブジェクト

分類Dev

ネストされたテンプレートを使用して$ dataコンテキストオブジェクトからKnockbackCollectionObservableの基になるバックボーンコレクションを取得する方法

分類Dev

テストのためにマウントされた酵素コンポーネントにreact-intlオブジェクトを挿入します

分類Dev

キーを複数の値オブジェクトに関連付けるための効率的なコレクション

分類Dev

ガベージコレクションで、しばらくオフにした後、到達できないオブジェクトが削除されない

分類Dev

非静的内部クラスオブジェクトは、参照されなくなった後にガベージコレクションされますか?

分類Dev

私たちは春ブーツに適用範囲PROTYPEのプロキシモードを使用する場合、プロトタイプBeanのオブジェクトがガベージコレクションを取得しますされている場合

分類Dev

他のオブジェクトの前に予防するオブジェクトのガベージコレクション

Related 関連記事

  1. 1

    RavenDBのドキュメント全体でコレクション内のオブジェクトの総数を取得するためのインデックスを作成するにはどうすればよいですか?

  2. 2

    ガベージコレクションされたオブジェクトの統計を取得するにはどうすればよいですか?

  3. 3

    Javaでガベージコレクションされたオブジェクトを確認する方法は?

  4. 4

    Javaでガベージコレクションされたオブジェクトを確認する方法は?

  5. 5

    カスタムキーによるMongoDBクエリコレクションと制限付きのネストされたオブジェクトを返す

  6. 6

    別のスレッドのワーカーオブジェクトのQtキューに入れられた終了イベント

  7. 7

    コレクションを配列オブジェクトに変換するためのこれら2つのアプローチの違い

  8. 8

    リンクされたオブジェクトのガベージコレクション

  9. 9

    ClassLoaderによって作成されたオブジェクトにガベージコレクションの機会がないのはなぜですか

  10. 10

    オブジェクトをオブジェクト内からガベージコレクションの対象にする方法は?

  11. 11

    GC(ガベージコレクター)によるガベージコレクションのオブジェクトをマークする方法

  12. 12

    .netガベージコレクターがオブジェクトを次世代に移動するのに必要なコレクションの数

  13. 13

    ガベージコレクションを適切に処理し、カスタムオブジェクトポインタのコレクションを使用してメモリリークを回避するにはどうすればよいですか?

  14. 14

    構成されたオブジェクトのガベージコレクション

  15. 15

    ガベージコレクションのためにオブジェクトを作成しないようにすることは、それでも意味がありますか?

  16. 16

    非静的メソッドで定義された変数は、オブジェクトとともにガベージコレクションされますか

  17. 17

    どのようにガベージコレクションは孤立したオブジェクトを識別するのでしょうか?

  18. 18

    MongoDBPHPのコレクション内のドキュメント内にネストされたオブジェクト値を取得する方法

  19. 19

    文字列のコレクションから結合されたオブジェクトのコレクションを作成するためのLINQクエリ

  20. 20

    実際のオブジェクトがガベージコレクションされている場合、WeakHashMapのエントリの値はどのようにしてガベージコレクションされますか?

  21. 21

    引数として渡され、メソッドでnullに設定されているオブジェクトのガベージコレクション

  22. 22

    ガベージコレクションではなく、ループの反復ごとに辞書属性が追加されたPythonオブジェクト

  23. 23

    ネストされたテンプレートを使用して$ dataコンテキストオブジェクトからKnockbackCollectionObservableの基になるバックボーンコレクションを取得する方法

  24. 24

    テストのためにマウントされた酵素コンポーネントにreact-intlオブジェクトを挿入します

  25. 25

    キーを複数の値オブジェクトに関連付けるための効率的なコレクション

  26. 26

    ガベージコレクションで、しばらくオフにした後、到達できないオブジェクトが削除されない

  27. 27

    非静的内部クラスオブジェクトは、参照されなくなった後にガベージコレクションされますか?

  28. 28

    私たちは春ブーツに適用範囲PROTYPEのプロキシモードを使用する場合、プロトタイプBeanのオブジェクトがガベージコレクションを取得しますされている場合

  29. 29

    他のオブジェクトの前に予防するオブジェクトのガベージコレクション

ホットタグ

アーカイブ