ホーム > .NET Framework | Gtk# | Mono | Tips | プログラミング > Gtk#でWorker threadからのGUI更新のInvokeがうまくいかない

Gtk#でWorker threadからのGUI更新のInvokeがうまくいかない

最近悩まされたBugのメモ。

最近メインで使うのがLinuxなので、Cross-platformなGUI ToolkitとしてGtk#を使っている。MonoDevelopにGUIデザイナが統合されていて、Linuxでコード書くときには非常に便利。
ところが、最近悩まされていたメモリリークの原因がどうやらGUI周りだったようで、僕の勉強不足なのか、ToolkitのBugなのかはよくわからん。内容はよくあるWorker threadからの定期的なGUI更新。Windows FormsでいうところのBeginInvokeする場面。プログレスバー表示とかの時のアレね。
Gtk#の場合にどうやってやるかというと、Mono Projectのサイト内に書いてある通りにGtk.Application.Invokeしたり、Gtk.ThreadNotify使ったりすればよい。はずだった。。

気づいた過程としては、なぜかGC.Collect()してるのにメモリ使用量がどんどん増えていて、CLR Profilerで見てみるとManagedメモリは正常。パフォーマンスモニタでUnmanagedなメモリがリークしてる。Unmanagedな処理は極力避けてるぞ?と思って思い当たったのがGtk#でした。

しかしこれからGUI Toolkitどうしよう。Cross-platformでC#から呼べるのってQtとかが思いつくけど、QtのC#ラッパーがUbuntu11.10のリポジトリには見つからないぞ?

今回、CLR Profilerとかパフォーマンスモニタとかで、メモリの中身を調査する方法がかなり理解できたので、まあ勉強にはなった。

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://ka.taoka.info/wp-trackback.php?p=215
トラックバックの送信元リスト
Gtk#でWorker threadからのGUI更新のInvokeがうまくいかない - ka.taoka.info より

ホーム > .NET Framework | Gtk# | Mono | Tips | プログラミング > Gtk#でWorker threadからのGUI更新のInvokeがうまくいかない

カレンダー
« 2018 年 12月 »
S M T W T F S
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
最近の反応
メタ情報

ページの上部に戻る