Возможно, проще думать, что «ссылки» никогда не будут «выпущены».Они просто перестают использоваться и больше не могут быть найдены, следуя какой-либо цепочке ссылок из глобального пространства или любого стека потоков.Затем они считаются мусором, и в какой-то момент сборщик придет и заберет память, которую они занимают.Если у них есть финализаторы, он не будет сразу собирать память, а помещает объект в очередь, которая сначала вызовет финализатор.
A FrameworkElement
не должно по разным причинам,вызовите Dispose
для любой ссылки, содержащейся в его словаре значений, когда она выгружается.Первоначально, потому что он не может знать, что он ответственен за это.
Представьте себе сценарий, в котором код в другом месте создал одноразовый объект, а также прикрепил его к элементу фреймворка.Что произойдет, если этот код позже попытается использовать объект только для того, чтобы обнаружить, что элемент framework взял его на себя, чтобы избавиться от него?
Код несет ответственность за создание одноразового объекта, чтобы обеспечить егорасположен в соответствующей точке.