1

何日も実行する 64 ビットの .NET プロセスがあります。このプロセスは、DCOM を使用してネイティブの 32 ビット COM サーバーを使用します。.NET プロセス ガベージ コレクターは COM オブジェクトの RCW しか認識せず、それらは非常に軽量で "収集する価値がない" ため、COM サーバーがメモリ不足になることがあります。どうにかしてガベージ コレクターにこれらの COM オブジェクトを認識させる必要があります。

記録のために、同じコードを定期的に強制的に実行してガベージ コレクションを開始しようとしましたが、問題は解決したため、問題は何らかのリークではなく、オブジェクトが十分に速く収集されなかっただけです。

GC.AddMemoryPressure()はい、より多くのメモリを消費していることをガベージコレクターに伝えることができる方法があることは知っています。問題は、64 ビットの .NET プロセスがそれを「大したことではない」と見なす可能性があることです。これは 64 ビットであり、ここではギガバイトであり、別のギガバイトでもあります。これらの割り当てにはるかに敏感です。

したがって、64ビットプロセスにとって「大したことではない」かもしれないことは、32ビットプロセスにとっては確かに大したことであり、64ビットプロセスのガベージコレクターを、使用されるメモリの量に対してより敏感にする必要があります別のプロセスによって。

64 ビット プロセスがタイムリーに RCW を収集し、32 ビット COM サーバーがメモリ不足にならないように、この状況を処理するにはどうすればよいでしょうか?

4

0 に答える 0