2

アプリケーションでサードパーティのライブラリを使用しています。GC.Collect()メソッドが明示的に呼び出されることがよくあります。
問題は、デッドロックが発生することです(これは、gcを明示的に呼び出す際のよく知られた問題です)。

GC.Collect()を無視するようにアプリケーション(app.config)を構成するにはどうすればよいですか?

PS:Javaでこれを行う方法(-XX:+ DisableExplicitGCフラグを使用)は知って
いますが、.Netでこれを行う方法がわかりません。

4

2 に答える 2

4

C#/。NetでGCをオフにすることはできません。

ただし、別のスレッドで実行しないように指示することはできます。これにより、次のことが役立つ場合があります

http://msdn.microsoft.com/en-us/library/at1stbec%28v=vs.100%29.aspx

しかし、サードパーティのライブラリのサプライヤに彼らのくだらないコードを修正させる方法はありませんか?

于 2013-02-27T12:30:35.363 に答える
4

GC.Collect() への呼び出しを「無視」する方法を知りません。利用可能な構成オプションがいくつかありますが、デッドロックの問題を解決できるとは思えません。

<configuration>
    <runtime>
        <gcServer enabled="true|false"/>
        <gcConcurrent enabled="true|false"/>
    </runtime>
</configuration>

基本的にガベージ コレクション モードを切り替えますが、GC.Collect() の呼び出しを無効にしません。

MSDN: gcServergcConcurrent

これがアプリケーションでデッドロックを引き起こしている理由を調査する方が賢明だと思います。サードパーティのライブラリ (どのライブラリですか?) が何らかの理由で GC.Collect() を呼び出している可能性があります。多分あなたはいくつかの詳細を提供できますか?

于 2013-02-27T12:44:22.520 に答える