3

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 に設定すると、より妥当な量のメモリが使用されました。

4

1 に答える 1

0

親コントロールのSystem.Windows.Forms.TrackBarで問題を追跡しました。トラックバーの最大値は2億を超えていました。最大値を1億に減らすと、メモリの約半分を使用しました。最大値を約1,000,000に設定すると、より適切な量のメモリが使用されました。

チェックボックス。Visibleは私を投げ捨てました。チェックボックスの時点で、アプリケーションがコントロールとそのメモリを作成していたようです。Visibleはtrueになりましたが、チェックボックス自体は問題とは関係ありませんでした。

于 2013-03-04T19:34:40.600 に答える