我在使用gtk-3的ruby 2.3.1時遇到內存泄漏。 在我的系統(Ubuntu 16-04)上,以下代碼消耗大約80 MB。 picture.jpg的大小是289kb。ruby的內存泄漏gtk-3
'需要 'gtk3'
def ptest
i=0
j=0
loop {
i += 1
j += 1
exit if j==50
@image = Gtk::Image.new
newPixbuf = GdkPixbuf::Pixbuf.new(:file => "picture.jpg")
@image.pixbuf = newPixbuf
@image.clear
@image=nil
if i == 10
p "GC"
GC.start
i = 0
end
}
end
ptest`
根據https://sourceforge.net/p/ruby-gnome2/mailman/message/8659687/這不應該發生。我能做些什麼來釋放內存?
這是我的第一個想法,但不幸的是,在Pixbuf對象的ruby中沒有非反射方法。所以我認爲紅寶石垃圾收集器GC應該完成這項工作,但事實並非如此。 –
unref方法不是Pixbuf方法,而是GObject方法,Pixbuf繼承自GObject。剛剛看到GC是垃圾收集器,但也許在Ruby中gobject-introspection不是那麼穩定。我試圖讀一下Ruby-Gtk +,事實上GLib –
的ref/unref/reference counting方法有一些問題您可以嘗試一種與您提供的鏈接上的方法幾乎相似的解決方案,但只需要一點點調整?:'靜值 unref(self) VALUE self; { g_object_unref(_SELF(self)); return Qnil; } ......和修改幻燈片代碼... newPixbuf = GDK :: Pixbuf.new(@ filenames.next,1024,800) @ image.pixbuf = newPixbuf newPixbuf.unref' –