C# .NET アプリケーションの実行時に Windows フォームにコントロールを追加しています。これらの各コントロールは特定の信号と相互作用し、その信号からのデータ (信号名、説明、ソース、単位、値など) を使用します。
これらのコントロールには、チェック ボックスがあります。これらのシグナルの 1 つだけのチェックボックスの Visible プロパティが true になると、アプリケーションのコミット済みメモリが 800MB を超えます。他の何百もの信号には問題はありません。
DebugDiag ツールを使用して、comctl32.dll が 805.45 MB を割り当てていることを確認しました。特に:
- 関数 comctl32_72380000!CCHeapAllocArraySize+3a
- 割り当てタイプ ヒープ割り当て
- ヒープ ハンドル 0xf37893cd
- 割り当て回数 1 個の割り当て
- 割り当てサイズ 803.20 MB
- リーク確率 16%
次のトラブルシューティング手順は何ですか? どのようなツールが役立ちますか?
更新: 親コントロールの System.Windows.Forms.TrackBar に問題を追跡しました。トラック バーの最大値は 200,000,000 を超えていました。最大値を 100,000,000 に減らすと、約半分のメモリが使用されました。最大値を約 1,000,000 に設定すると、より妥当な量のメモリが使用されました。