誰かが助けてくれることを願っています!
VB6 から変換されたかなり大きな VB.Net MDI アプリケーションがあります。MDIChild フォームを開かずに最初に起動すると、約 35,000K が使用されます。より多くのフォームが開かれる (ただし、閉じられない) と、(タスク マネージャーによると) メモリ使用量はフォームごとに約 4,000K まで上昇します。(TM はアプリケーションに割り当てられたメモリのみを表示し、実際に使用されたメモリは表示しないことを認識しています。)
問題は、割り当てられたメモリが特定のポイントに達すると (ターゲット マシンで使用可能なメモリの量によって異なります)、1 つまたは複数の開いているフォームが閉じられるまで、フォームを開くことができなくなることです。開くことができるフォームの量の「制限」は、マシンの使用可能なメモリに依存するようです。
例: - マシン全体で 512M しかない仮想マシンでは、約 7 ~ 8 フォームのように見え、割り当てられたメモリは約 80,000K になります。- 3GB のターミナル サーバー マシンで、他のさまざまな負荷の高いアプリケーションも実行していますが、約 20 以上のフォームと約 100,000 ~ 105,000K のメモリ割り当てで停止します。
perfmon を使用して、リークがあるかどうかを確認してみました。これは、安定した使用を示しています。
ただし、フォームを閉じても、割り当てられたメモリは、閉じられた最初のフォームでは約 3000K だけ減少し、その後閉じられたフォームごとに 100K しか減少しません。その後、さらにいくつかのフォームを追加するとメモリが増加し、いくつかを閉じると、同じ -3000K、-100K のメモリ削減パターンが再び発生します。
これまでにこれに遭遇した人はいますか?これは少しショーストッパーのように見えるので、誰か助けてください!返信をお待ちしております。
ちなみに、元のVB6バージョンにはこの問題はなく、各フォームを閉じると、アプリが割り当てられたよりも少ない量をリリースするため、メモリ割り当てが徐々に増加するのではなく、最初のメモリ割り当てに戻ります。
編集:開発中に同じエラーが発生しました。UserControl で WIN32Exception がスローされているようです。エラーは「ウィンドウ ハンドルの作成中にエラーが発生しました」です。
ありがとう、よろしく、デュアン。