解決できない問題があります。もちろん、ここで私は解決策を見つけるのに役立つ提案があることを期待しています。
基本的に、私のアプリケーションは実行時に生成されTPopupMenuItem
たsでいっぱいです(すべてのTPopupMenu
sはハードコーディングされています)。アイテムを単に非表示/表示または有効化/無効化する場合もあれば、実行時にアイテムを作成する場合もあります。
一部のマシンでのみ、アプリケーションを数日間(2日以上)実行したままにすると、ポップアップメニューが正しく機能しなくなります。
動作は次のとおりです。
見た目はすべてTPopupmenu
同じで、同じアクションを実行します。
アクションは、最初TPopupMenuItem
のアプリケーションによって実行されるアクションです(アプリケーションの起動時に実行時に最初に生成されるアクションです。これが私が持っている唯一のヒントです)。
私が持っている正しいシナリオを想像してみてください(3項目- TPopupMenu
):
Item23
Item24
Item25
私が見る問題の後:
アイテム1
アイテム1
アイテム1
(ここで、Item1はTPopupMenuItem
別のものに属していますTPopupMenu
)。
これはあなたに何かを教えてくれますか?
ありがとう。
アップデート:
ポップアップメニューのコードを調べてみたところ、一般的な原因が何であるかがわかりました。これは、FastMM4がこれを見つけられなかった理由も説明しています。
while mnuItem.Count > 0 do
mnuItem.Delete(0);
削除(ドキュメントを読んだばかりです)はアイテムを解放しません。代わりに無料で呼び出す必要があります。とにかく、アプリケーションを閉じると、メインのポップアップメニューが正しく解放され、FastMM4は文句を言いません。したがって、これがおそらく解決策です。Deleteが使用された理由がわからないので、そのコードを記述しませんでした。
さらなる更新:
サンプルアプリケーションを作成しようとしましたが、問題を再現できませんでしたが、これを使用するとパフォーマンスが大幅に向上することに気付きました(10000回の再帰でループを試しました)。
while mnuItem.Count > 0 do
mnuItem.Items[0].Free;
私は自分のアプリでこれを試してみます(ただし、問題が発生したかどうかを実際に知るには、数日経過する必要があります。とにかく、これは大きな改善です)。