我在使用gtk-3的ruby 2.3.1上遇到了内存泄漏。在我的系统(Ubuntu16-04)上,下面的代码消耗大约80 MB。picture.jpg的大小为289 is。
“要求'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/的说法,这种情况不应该发生。我能做些什么来释放记忆?
发布于 2017-04-08 14:35:15
显然,我的Rubygdk3-Gem中有一个bug。gem更新解决了这个问题。
发布于 2017-04-07 01:55:04
我不喜欢Ruby,但我知道一些Gtk+。在C中,您必须自己处理内存分配,您需要解压像素。
GtkImage不假定对像素的引用;如果您拥有引用,仍然需要取消它。
因此,最有可能的是,如果Ruby不实现ARC (GObjects上的自动引用计数),那么您必须在@image.pixbuf = newPixbuf之后立即执行类似newPixbuf.unref (不确定Ruby语法)的操作。
希望能帮上忙。
https://stackoverflow.com/questions/43258357
复制相似问题