Win32 및 Win64에서 GHC 7.4.2 및 GtkH 0.12.4를 사용하면이 프로그램은 더 많은 메모리를 사용하여 컴퓨터에서 약 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
- 편집 : 나는 2.24.10
될 일이 here 발견은 Gtk의 버전을 사용하고 있습니다 - Edit2가 값 : 노출 이벤트 수정에서 widgetQueueDraw
를 요청하는 대신 외부 타이머를 사용하여, 그래서 문제. 당장은 그렇게 하겠지만 왜 그런지는 모르겠다. 필자는 여러 가지 GUI 프레임 워크 (페인트 이벤트에서 GUI 컨트롤을 무효화)를 사용하여이 접근 방식을 여러 언어로 사용했습니다. 일반적으로 무효화를 호출하면 GUI 스레드가 다음 번에 읽히는 플래그가 설정됩니다. 각 프레임의 컨트롤을 다시 그려주는 GUI 스레드에서 끝나지 만 실제로는 여기에서 원하는 것입니다. 그것은 Gtk2Hs에서와 비슷하게 보입니다.
GHC 7.6.2에서는 Fedora x86_64에서 GTKhs 0.12.4 및 GTK + 1.2.10을 사용하여 -O2 또는 명시 적 최적화 플래그를 사용하지 않고이 버그를 재현 할 수 없습니다. 나는 -O2가 약간 높은 메모리 사용 (그러나 성장 없음)과 극단적 인 CPU 사용 없이는 그것을 보았다. –
흥미 롭다 - 나는 GHC와 Gtk의 다른 버전으로 시도 할 것이다. – trethaller
아, GTK-2가 아니라 내 GTK-2 버전을 말했어 야했다. GTK-2는 2.24.16 버전입니다. –