ホーム > .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 年 6月 »
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
最近の反応
メタ情報

ページの上部に戻る