为了账号安全,请及时绑定邮箱和手机立即绑定

2GTK# 如何正确清理小部件、内存泄漏

2GTK# 如何正确清理小部件、内存泄漏

C#
白衣非少年 2021-07-15 14:02:15
我实际上正在开发由 GTK# 2.12 提供支持的软件,我们有一些内存泄漏,我正在寻找如何改进它。我制作了一个小应用程序来测试摆脱小部件的正确方法。我正在创建 10 000 个标签,然后将它们删除。这是我的标签类:namespace test_gtk_objects{    public class TimeLabel : Label    {        private bool disposed = false;        protected DateTime _time;        public TimeLabel(DateTime time)        {            Time = time;        }        ~TimeLabel()        {            Dispose(false);            Console.WriteLine("Called dispose(false) of class" + this.ToString());            GC.SuppressFinalize(this);        }        //dispose        public override void Dispose()        {           // Console.WriteLine("Called dispose(true) of class" + this.ToString());            Dispose(true);            GC.SuppressFinalize(this);        }        protected virtual void Dispose(bool disposing)        {            if (disposed)                return;            if (disposing)            {                Hide();                Unrealize();                Unparent();                Unmap();                Destroy();                Unref();                Console.WriteLine("ref: " + RefCount.ToString());                 // Free any other managed objects here.                //            }            disposed = true;            base.Dispose();        }        protected void display(Label input_label)        {            input_label.Text = _time.ToString("HH:mm:ss");        }        internal DateTime Time        {            get { return _time; }            set            {                if (_time != value)                {                    _time = value;                    display(this);                }            }        }    }}如您所见,我已按照建议覆盖了 dispose 方法。我还尝试了一些方法来释放大部分小部件(尤其是使用 unref() )以确保小部件没有链接到其他东西。在我的主窗口中,我只是在 à 列表中创建这些标签,然后通过对每个标签调用 Dispose 方法来删除它们。我所有的小部件似乎都被删除了,但我总是有一些Glib。切换引用,Glib。您可以在我的内存快照中看到的信号:如果你能帮我解决这个问题,我不知道如何摆脱它,我将不胜感激
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

当我通过在 destroy 方法中调用 Glib Dispose 来销毁小部件时,我最终编辑了 GTK 锐利库以删除切换引用。我的对象数量不会快速增长,并且在需要时我的所有对象都会被删除!


查看完整回答
反对 回复 2021-07-17
  • 1 回答
  • 0 关注
  • 231 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信