我有一个我无法解决的问题。当然,在这里我只是希望有一个可以帮助我找到解决方案的建议。
基本上我的应用程序充满了运行时生成TPopupMenuItem
的 s(而所有的TPopupMenu
s 都是硬编码的)。在某些情况下,我所做的只是隐藏/显示或启用/禁用项目,在其他情况下,我会在运行时创建项目。
仅在某些机器上,让应用程序运行几天(2 天或更长时间)后,弹出菜单不再正常工作。
行为是:
所有的TPopupmenu
项目看起来都是一样的,并执行相同的动作。
该操作是由第一个TPopupMenuItem
应用程序执行的操作(第一个在应用程序启动时在运行时生成,这是我唯一的提示)。
想象一下,在正确的情况下,我有(在 3 项中TPopupMenu
):
第 23 项
第 24 项
第 25 项
问题后我看到:
项目1
项目1
项目1
(其中 Item1TPopupMenuItem
属于另一个TPopupMenu
)。
这是否告诉你一些事情?
谢谢。
更新:
我试图查看我的弹出菜单的代码,发现可能是一个常见原因,这也解释了为什么 FastMM4 没有找到这个:
while mnuItem.Count > 0 do
mnuItem.Delete(0);
删除(我刚刚在文档中阅读)不会释放该项目,我应该调用 free 代替。无论如何,当关闭应用程序时,主弹出菜单被正确释放,FastMM4 不会抱怨。所以这可能是解决方案,现在我不知道为什么使用删除,我没有写那个代码。
进一步更新:
我尝试制作一个示例应用程序,但无法重现该问题,但可以肯定的是,我注意到使用它的性能要高得多(我尝试了一个具有 10000 次递归的循环):
while mnuItem.Count > 0 do
mnuItem.Items[0].Free;
我会在我的应用程序中尝试这个(但我需要等几天才能真正知道我是否遇到了问题,无论如何这肯定是一个重大改进)。