C# .NET アプリケーションで「OutOfMemoryException」が発生します。多くの場合、イメージを描画する必要がある場合 (System.Drawing.Image.get_RawFormat) またはスレッドを作成する必要がある場合 (System.Threading.Thread.StartInternal) に発生します。
言うまでもなく、開発マシンでクラッシュを再現することはできません。クラッシュしたアプリケーションのヒープ スナップショットを取得し、Process Explorer を使用して別のクラッシュしたインスタンスを確認しました。
たとえば、あるインスタンスでは、380M のヒープ RAM (問題ないように見えます)、7758 のハンドル (かなり高いように見えます)、2245 の USER オブジェクトと 1798 の GDI オブジェクトがあります)。
素敵なソフト「Process Hacker」を使って「ハンドル型ヒストグラム」を取得することができました。これは、4181 個の「セクション」ハンドル、2834 個の「イベント」ハンドル、および 420 個の「スレッド」ハンドルを示しました。「セクション」ハンドル数は、開発マシンで見つけたものよりもはるかに多くなっています。
「セクション ハンドル リークの原因は何ですか? 」という質問を確認しましたが、残念ながらその回答は役に立ちませんでした。メモリ マップト ファイルや IPC は (少なくとも直接的には) 使用しません。また、この投稿で言及されている関数も使用しません。
アプリケーションのメモリ プロファイルを作成しようとしましたが、明らかなまたは重大なメモリ リークは見つかりませんでした。GC を実行し、メモリ情報/ハンドル数を出力するアプリケーションにフックを追加しましたが、このホット キーを使用すると、実稼働環境でもリークを再現できませんでした。
一部の問題を引き起こす可能性のあるサードパーティ製ソフトウェアを使用しています (DevExpress コントロールおよびその他のコンポーネント)。
現時点では、私はかなり無知であり、あなたのアドバイスを求めたいと思います. 何を確認または調べることができますか? 問題を追跡するにはどうすればよいですか? 助けてくれてありがとう!