WPF,这个对象是不是被回收了呢

WPF,这个对象是否被回收了呢?

<Window x:Class="WPF1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPF1"
        Title="MainWindow" Height="350" Width="525">
    <Grid Height="200" Width="200" Name="grid1" Background="#FFB2D392" MouseLeftButtonDown="grid1_MouseLeftButtonDown">
        <Button Name="button1" Content="button1" Margin="50"/>
    </Grid>
</Window>


private void grid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    grid1.Children.Remove(button1);
}

WPF,这个对象是不是被回收了呢
在上面的代码中,单击grid1,就把button1从grid1中移除,那么,我想问的是,移除button1之后,这个button1对象还在吗?它是否被系统回收了呢?没有回收的话,如果程序中这样的移除动作很多,那么,岂不是有很多控件没有被回收,像是游魂一样,它们在哪里呢?会不会增加内存占用呢?
------解决思路----------------------
从你的代码具体来说,button1没有被回收。
因为你还可以通过this.button1来使用它(button1是窗体的成员变量)。
------解决思路----------------------
你的一个 MainWindow 中只有一个 button1。如果你说“如果程序中这样的移除动作很多”,那么明白的人会问你“你为什么不首先要求只及应该移除‘很多的’MainWindow呢?”
------解决思路----------------------
.Net的GC只要对象没有引用就会回收(先标记,到满足回收策略就会随着其他垃圾一同被释放)
回收也是要付出“代价”的吧,比如默认情况下会挂起其他线程,清理引用树,释放内存,然后恢复其他线程
你不用过于担心什么时候才真正回收,如果一个很小的对象都实时去回收,这太影响程序的性能
------解决思路----------------------
只及  -->   自己

实际上你完全没有说明什么叫做“很多”。这是一个概念含糊不清而造成的问题。
------解决思路----------------------
堆砌技术名词儿多了并不是好事,可能是用在毫无必要去考虑的某种空想的逻辑里边。把它嵌入实际的“可操作的”逻辑链条——找到产生问题的根源,才可能解决问题。
------解决思路----------------------
没有,xaml标记  会在后台被编译成 baml(二进制应用程序标记语言)并嵌入到dll或者exe文件。
如果是C# 开发,编译器 通过使用csc.exe  将程序集编译成 对应的.exe文件。  即使你移除了,但还是存在于程序集或者dll中的
------解决思路----------------------
WPF中的对象回收机制是隐蔽的,这意味着不需要用户去考虑其回收,运行库自动处理了。实际WPF的各种对象占用内存不是很高,除非对象内部有大内存的静态对象存在,否则移除后,UI部分的内存是会释放的。