使用GHC 7.4.2和GtkHs 0.12.4,在Win32和Win64上,该程序占用的内存越来越多,在我的机器上消耗大约2Mb /秒。 我只是试图使用Gtk制作动画(这就是为什么我使窗口无效以便立即重绘)。为什么这个最小的Gtk2Hs程序泄漏内存
我试图通过RTS选项分析内存使用情况,但是这个内存不可见。
这是怎么回事?
import Graphics.UI.Gtk
main :: IO()
main = do
initGUI
window <- windowNew
onDestroy window mainQuit
onExpose window (\_ -> widgetQueueDraw window >> return True)
widgetShowAll window
mainGUI
- 编辑:我使用GTK的版本发现here这恰好是10年2月24日
- EDIT2:因此,在使用外部定时器而不是从揭露事件的修复要求widgetQueueDraw
的问题。它现在会做,但我不明白为什么。我已经用几种语言和几种GUI框架(在绘画事件中使GUI控件失效)使用了这种方法。通常,调用invalidate只需设置一个标志,在下一次GUI线程启动时读取标志。它在GUI线程中每帧重新绘制控件,但实际上这是我想要的。它看起来像一个但在Gtk2Hs。
对于GHC 7.6.2,在Fedora x86_64上使用GTKhs 0.12.4和GTK + 1.2.10,使用-O2或者没有显式优化标志,我不能重现这个bug。我确实看到没有-O2的内存使用率稍高(但没有增长)和CPU使用率极高。 – 2013-04-23 20:18:32
有趣 - 我会尝试不同版本的GHC和Gtk – trethaller 2013-04-23 20:34:00
哦,我应该说我的GTK-2版本,而不是GTK +。 GTK-2版本是2.24.16。 – 2013-04-24 02:32:15