C# 刚刚更新和处理Gtk.Window时内存泄漏

C# 刚刚更新和处理Gtk.Window时内存泄漏,c#,mono,gtk#,C#,Mono,Gtk#,仅仅创建和处理Gtk.Window对象似乎会导致内存泄漏 例如,下面的代码示例占用的内存很快就会超过1GB(如Linux System Monitor所示,几秒钟后VM和驻留内存都会出现): 及 这似乎没有什么区别 有人知道在这个用例中要做什么来防止内存泄漏吗?啊-回答我自己的问题 这似乎可以防止内存泄漏 var window = new Gtk.Window(Gtk.WindowType.Popup); window.Destroy(); window.Dispose(); 我猜你错过了一部

仅仅创建和处理Gtk.Window对象似乎会导致内存泄漏

例如,下面的代码示例占用的内存很快就会超过1GB(如Linux System Monitor所示,几秒钟后VM和驻留内存都会出现):

这似乎没有什么区别


有人知道在这个用例中要做什么来防止内存泄漏吗?

啊-回答我自己的问题

这似乎可以防止内存泄漏

var window = new Gtk.Window(Gtk.WindowType.Popup);
window.Destroy();
window.Dispose();

我猜你错过了一部分,它说“如果GtkFoo不是顶级窗口,那么…”这意味着你创建的窗口不是
顶级窗口
不,我读了那部分,我只是最初没有测试Dispose和Destroy。这是常见问题解答中没有的,因为它不是Gtk常见问题解答。但是是的,它不是一个顶级窗口。(实际上,我将窗口嵌入到winform的表单中。)这些分配给GC带来了很大的压力。你真的需要创建10485760个Gtk.Window实例吗?它只是一个测试程序,在真实的程序中,创建的要少得多。
var window = new Gtk.Window(Gtk.WindowType.Popup).Ref().Sink(); 
window.Unref();
window.Destroy();
new Gtk.Window(Gtk.WindowType.Popup).Destroy();
var window = new Gtk.Window(Gtk.WindowType.Popup);
window.Destroy();
window.Dispose();