多数のウィンドウがあるグレードプロジェクトの処理方法
質問
現在16個のウィンドウ/ダイアログがあり、約130KBであり、最終的には約25個のウィンドウ/ダイアログがあり、約200KBになるPyGTK / gladeアプリケーションで作業しています。現在、すべてのウィンドウを1つのモノリシックな空き地ファイルに保存しています。ウィンドウを実行するとき、次のように呼び出します...
self.wTree = gtk.glade.XML("interface.glade", "WindowXYZ")
各ウィンドウを独自の空きファイルに分割する方が良いのではないかと思います。 25個のウィンドウ/ダイアログを含む1つのgladeファイルの代わりに、それぞれ1つのウィンドウ/ダイアログを含む25個のgladeファイルを作成し、次のように呼び出します。
self.wTree = gtk.glade.XML("windowxyz.glade")
これを行う最良の方法は何だと思いますか?ある方法は別の方法よりもリソースを消費しますか?個々の空き地ファイルに行くのが良いことの1つは、ウィジェットの命名が簡単になることです。たとえば、すべての[OK]ボタンに「windowxyz_ok」という名前を付けますが、単に[ok]に変更することもできます。代わりに。物事を簡単にします。欠点は、異なるウィンドウに変更を加えるのが少し不便かもしれないことです。
私は、ありとあらゆる議論を受け入れています。ありがとう!
解決
私のプロジェクトでは、グラードファイルごとに常に1つのウィンドウがあります。プロジェクトにも同じことをお勧めします。
主な理由は次の2つです。
- gtk.glade.XML()を呼び出すたびに全体が解析されるため、高速でメモリ使用量が少なくなります。ルート引数を渡して、すべてのウィンドウのウィジェットツリーを作成しないようにすることはできますが、興味がない場合でも、すべてのXMLを解析する必要があります。
- 概念的には、ウィンドウごとにトップレベルが1つあれば理解しやすくなります。ファイル名を見れば、特定のダイアログ/ウィンドウがどのファイル名にあるかを簡単に知ることができます。
他のヒント
それが違いを生むかどうかを調べるために、いくつかのタイミングを取りましたか?
問題は、私が理解している限り、GladeはXMLファイルを解析するときに常にすべてのウィジェットを作成するため、XMLファイルを開いて1つのウィジェットのみを読み取ると、多くのリソースが無駄になるということです。
別の問題は、そのウィジェットの別のインスタンスが必要な場合、ファイルを再読み込みする必要があることです。
以前は、一度だけ作成されたすべてのウィジェット(アバウトウィンドウ、メインウィンドウなど)を1つのgladeファイルに配置し、複数回作成する必要のあるウィジェット用に個別のgladeファイルを作成しました。
ウィンドウごとに異なるgladeファイルを使用しています。しかし、同じgladeファイル内のウィンドウに関連付けられたダイアログを保持します。あなたが言ったように、命名の問題は厄介です。
2つのウィンドウを持つ1つの空き地ファイルがあります。サイズは約450kbで、libglademmをGTKmmで使用すると速度低下は見られません。