если кнопка является классом (тип ссылки), она размещается в куче.(типы значений выделяются в стеке в текущей реализации CLR, если только они не содержатся в другом ссылочном типе или не записываются в замыкание - в этом случае они находятся в куче.)предварительно выделенные сегменты памяти разных размеров, соответствующие поколениям 0, 1 и 2. Когда вы создаете новый объект, он выделяется в поколении 0. И это распределение действительно быстрое, поскольку он просто перемещает указатель с помощью дельты =размер объекта.CLR очищает значения в объекте до значений по умолчанию в качестве предварительного шага перед выполнением ctor.
Периодически все потоки приостанавливаются и запускается сборщик мусора.Он создает график достижимых объектов путем обхода «корней».Все недоступные объекты отбрасываются.Сегменты генерации перемещаются / уплотняются, чтобы избежать фрагментации.Gen 0 собирается чаще, чем 1 и т. Д. (Поскольку объекты Gen-0, вероятно, являются недолговечными объектами).После сбора возобновляются потоки приложения.
Подробнее об этом см. В документах, объясняющих сборщик мусора и поколения.Вот один .