我正在ToolStripMenu
使用文件中的条目填充 a XML
。每个ToolStripItem
添加到菜单中的都会自动获得大约十几个分配给它的事件处理程序。用户可以选择更改XML
和刷新菜单,使用以下命令清除所有内容:
menuStrip1.Items.Clear();
这将从 中重新填充XML
并刷新表单。似乎所有这些动态项的事件处理程序从未从内存中删除。大多数项目不直接位于 menuStrip1 上,而是位于动态创建的子菜单中,这些子菜单位于menuStrip1
.
尽管如此,我可以坐在那里刷新表单并且内存只是膨胀失控,5-10 MB
每次刷新大约100 dynamic ToolStripItems.
可以快速达到数百 MB,这会使应用程序崩溃。
还加载其他内容,ToolStripItems
例如属性和图标,但似乎是事件处理程序使用了大部分添加的内存。我注释掉了所有的处理程序,每次刷新时内存变得更加(但不是完全)可持续。
是否有必要枚举所有菜单和子菜单并单独释放每个事件处理程序以确保它不会留下来?