Win32 と Win64 で GHC 7.4.2 と GtkHs 0.12.4 を使用すると、このプログラムはますます多くのメモリを消費し、私のマシンでは約 2Mb/秒を消費します。私は単に Gtk を使用してアニメーションを作成しようとしています (これが、ウィンドウを無効にしてすぐに再描画される理由です)。
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 を使用していますが、たまたま 2.24.10 です。
widgetQueueDraw
-- Edit2: したがって、公開イベントから要求する代わりに外部タイマーを使用すると、問題が解決します。今のところはうまくいきますが、理由がわかりません。いくつかの GUI フレームワーク (ペイント イベントで GUI コントロールを無効にする) を使用して、いくつかの言語でこのアプローチを使用しました。通常、invalidate を呼び出すと、次に GUI スレッドが起動したときに読み取られるフラグが設定されるだけです。これは、GUI スレッドがフレームごとにコントロールを再描画することになりますが、実際にはそれがここで必要なことです。Gtk2Hs のように見えます。