27

別のプロセスまたは WinDBG 内部から .NET プロセスでガベージ コレクションをトリガーする方法はありますか?

ネイティブ/マネージド境界を越えて移動するときにコレクションを強制するマネージド デバッグ アシスタントがあり、AQTimeにはこれを行うことを示唆するボタンがあるようですが、その方法に関するドキュメントが見つかりません。

4

4 に答える 4

19

別の質問で回答:

基本的に、PerfViewを使用します。

PerfView.exe ForceGC [ProcessName | Process ID] /AcceptEULA

本番環境での使用は意図されていません。

于 2016-02-02T16:44:23.757 に答える
10

ええと... 即時ウィンドウがあります。プロセスにアタッチする余裕がある場合は、即時ウィンドウで手動で GC.Collect を実行できると思います。

より大きな質問: なぜ手動で GC.Collect を誘導したいのですか? これは厄介な習慣であり、より大きな設計上の問題を示しています。

于 2008-09-19T12:57:38.760 に答える
3

GC.Collectを使用するというJohnCocktoastanの回答は、VisualStudioにある場合に最適なオプションです。

WinDBGで実際に収集を行うための代替手段をまだ見つけることができませんが、「どのくらいのメモリが再利用可能か」という問題に一歩戻ります。(ジョンの回答に対する私のコメントを参照してください)!DumpHeapと!GCRootの組み合わせによるスクリプト( PowerDBG ?)検索を使用して、ルート化されていないハンドルを見つけ、使用されたスペースを合計する(基本的に、 GCはデバッガーを使用して実行します)。しかし、これを考えて以来、私はこれらのバグの1つを持っていなかったので、それを行うためのコードを書き込もうとしませんでした。

于 2009-08-28T21:47:37.430 に答える
0

リモート処理を介して関数/オブジェクトを公開する場合、それは非常に簡単に実行できます。

于 2008-09-19T11:30:26.577 に答える