Widgets are a massive performance leak if you are recreating them often, like when spamming the MainMenu key to create / remove the main menu. Thing is that we have to create and remove it when desired because both hidden and removed widgets still give the full performance hit including mouse events. The fix seems to be to call the garbage collector right after using RemoveParent and as the others have said garbage collection will only work when there are no property references left.
- Related
[Bug report] Bad widget performance : Slate : ProcessMouseMove