ToolStripMenu
ファイルからエントリを入力していますXML
。メニューに追加されたそれぞれToolStripItem
は、それに割り当てられた約 12 個のイベント ハンドラーを自動的に取得します。ユーザーには、メニューを変更しXML
て更新するオプションがあり、次を使用してすべてをクリアします。
menuStrip1.Items.Clear();
これにより、フォームから再入力されXML
、フォームが更新されます。これらすべての動的アイテムのイベント ハンドラーがメモリから削除されることはないようです。ほとんどの項目は menuStrip1 に直接置かれるのではなく、動的に作成された にあるサブメニューにありますmenuStrip1
。
それにもかかわらず、私はそこに座ってフォームを更新すると、メモリが制御不能になり、5-10 MB
更新ごとに約100 dynamic ToolStripItems.
数百 MB に達し、アプリケーションがクラッシュします。
ToolStripItems
プロパティやアイコンなどの他のものもロードしますが、追加されたメモリのほとんどを使用するのはイベント ハンドラーのようです。すべてのハンドラーをコメントアウトすると、更新のたびにメモリがはるかに (完全ではありませんが) 維持できるようになりました。
すべてのメニューとサブメニューを列挙し、各イベント ハンドラーを個別に解放して、固執しないようにする必要がありますか?