none
UserControl自动释放问题 RRS feed

  • 问题

  •  代码如下:

    public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
                this.AllowDrop = true;
                this.CreateGraphics();
            }

    }

    如果下面这两句同时存在,UserControl1 就不能自动触发dispose, 任何一句注释掉,UserControl1 都会自动触发dispose 。 (内存是否释放使用dotmemery查看)

      this.AllowDrop = true;
      this.CreateGraphics();

    请问这是为啥?这两个条件都要满足的条件下,怎么写才能让UserControl1 自动释放?



    2022年1月22日 7:36

全部回复

  •  代码如下:

    public partial class UserControl1 : UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
                this.AllowDrop = true;
                this.CreateGraphics();
            }

    }

    如果下面这两句同时存在,UserControl1 就不能自动触发dispose, 任何一句注释掉,UserControl1 都会自动触发dispose 。 (内存是否释放使用dotmemery查看)

      this.AllowDrop = true;
      this.CreateGraphics();

    请问这是为啥?这两个条件都要满足的条件下,怎么写才能让UserControl1 自动释放?



    Hi 梅花十三,

    内存释放问题比较复杂,我也不能全部解释。

    但Graphics为非托管资源,最好需要显式调用dispose释放掉它。

    最好这样调用:

    Graphics g = this.CreateGraphics();

    \\to do

    g.dispose();

    Best Regards,

    Jiale


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2022年1月24日 6:28
  • 我以为自定义的UserControl在不再使用的时候,会自动触发它自己的disopse函数,

    我本来是想在UserControl1的dispose函数中,调用Graphics.dispose(),显示的释放Graphics,

    但是,如上面所说,UserControl1的dispose函数并不会被调用。

    我必须在使用完UserControl1后,显示的调用UserControl1的dispose()吗?

    2022年1月28日 7:51
  • 是的,如果不会被调用。

    你可以显式调用 UserControl1的dispose()

    避免资源的浪费。


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2022年1月28日 8:30