以前のシリーズでは:
OutOfMemoryException、スタック サイズが大きい、スレッド数が多い
多くのメモリを消費する .net Windows サービスがあります。GC ヒープは大きくありません。また、スタックサイズは大きくありません。大きいのはプライベートデータと呼ばれるものです。また、タスク マネージャーで、自分のアプリケーションがタスク マネージャーがハンドルを呼び出すものを大量に消費していることがわかります。私のアプリケーションは 2326 個のハンドルを消費します。これらのハンドルは、プライベート データを占有するいくつかのウィンドウ ハンドルであると思います。このプライベート データは、Thread Environment Blockとしてマークされたブロックによって占有されていることがわかります。それは何ですか?
VMMap によるアプリケーションのメモリ使用量のスクリーンショット
タスク マネージャーによるアプリケーションのメモリ使用量のスクリーンショット
アップデート
ProcessExplorer を実行します。現在、サービスの 2 つのインスタンスを実行しています。Gen2 GC の仮想メモリを大量に消費していることがわかります。この見た目は疑い深い。また、GC ヒープ サイズに予約されている合計は、2 つのプロセスで同じです。