2

サーバー環境でのガベージ コレクション/メモリ制限に関して、.Net フレームワークの動作が異なる可能性はありますか? 32 GB の物理 RAM を搭載した 64 ビット サーバー マシンで明示的に x86 でコンパイルされたアプリを実行しています。その特定のアプリ以外は何も実行されておらず、サーバー/他のすべてのアプリが合計 520 MB を使用しているにもかかわらず、メモリが不足しています (SystemOutOfMemoryException)。自分の(クライアントwin7)マシンでその動作を再現できません。

これで、アプリがメモリを集中的に使用することがわかりましたが、クライアントではなくサーバーで問題が発生するのはなぜですか?

4

2 に答える 2

2

in .NETは、マシンが 文字通りメモリ不足でOutOfMemoryException あることを意味することはめったにありません。 OutOfSomeNecessaryCriticalResource誤解を招きにくい名前だったでしょう。

OutOfMemoryException実際には、問題が何であれ、プログラマーがその特定の状況でその特定の例外をスローすることを選択したことを意味します。たとえばImage.FromFile(...)、破損した JPEG (または .Net で開くことができない任意のファイル形式) を単に呼び出すと、 OutOfMemoryException.NET がメモリ不足になるためではなく、無効なファイルに対してスローされる文書化されたタイプの例外であるため、 が発生します (理由はわからないので聞かないでください)。

特定の問題をデバッグするには、何が (いつどこで) スローされているかを調べる必要がありますOutOfMemoryException。はOutOfMemoryException、それ自体ではまったく意味がありません。

于 2010-05-07T15:13:58.920 に答える
1

はい、Windowsサーバーでは、別の種類のガベージコレクターを使用します。サーバースタイルのアプリケーションのニーズに合わせて調整されており、ガベージの収集はそれほど積極的ではありません。この動作は、<gcServer>要素を使用してapp.configファイルで変更できます。

それが本当の問題になる可能性は低いですが、アプリではより現実的な使用パターンが見られると思います。優れた64ビットサーバーを使用しているときに意図的にx86モードを強制することは、可能であれば避けたいことです。

于 2010-05-07T17:45:23.283 に答える