我实际上正在开发由 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 锐利库以删除切换引用。我的对象数量不会快速增长,并且在需要时我的所有对象都会被删除!
- 1 回答
- 0 关注
- 231 浏览
添加回答
举报
0/150
提交
取消