2011-07-20 11 views
6

かなり複雑なPyQtアプリケーションを作成している人は、アプリケーションを高速化するためにどのようなヒントを教えてください。PyQtアプリケーションを最適化する

  • 私は「ダッシュボードの書面を持っている破壊され、再作成するときTreeWidget内のアイテムをユーザーがクリック:私は私のプログラムは、それが大きくなるにつれて遅くするためにどこから始まるの例をいくつか持っています。 TreeWidget内の項目をクリックするとダッシュボードが変更されるが、ウィジェットを破棄して再作成する必要はない、モジュラインターフェースを持つより良い方法は何でしょうか。

  • 各ダッシュボードは、ネットワークロケーションからイメージを読み込みます。これは、アプリケーションの周りをナビゲートするといくらかの減速を引き起こしますが、メモリにロードされた後、「同じダッシュに戻る」方が速くなります。メモリにイメージをプリロードするプログラムロード時にスレッドを実行する方法や方法はありますか?もしそうなら、あなたはそれをどのように実装しますか?

  • 大量のダッシュボードアイテムとデータがロードされると、通常はデータロードがスレッド化され、各スレッドが完了するまでロードされますか?誰かがすばやくブラウジングしているとき、これは実行可能ですか?ユーザーがダッシュボードを変更したときにスレッドが機能しなくなるようなスレッド用のキルスイッチを実装しますか?あるいは、糸の絶え間ない創造と殺しは、ある種の、まあ、崩壊を引き起こすでしょう。

巨大な質問の申し訳ありませんが、それらは一緒にバンドルすることを保証するのに似ていたようです。

答えて

7

これはあなたのやっていることとまったく同じかどうかはわかりませんが、カスタムウィジェットのリストがいくつかのアプリにあるのと似ています。そして、あなたがたくさんのウィジェットを作成して破壊しているとき、それは大幅に減速します。

ウィジェットの総量が少ないという問題が発生しただけで、たくさんのウィジェットを作成して削除するだけで、情報を更新する必要があるときにウィジェットのデータを変更することができます。情報が変わるたびに新しいウィジェットを作成するのではなく、そうすれば、ウィジェットの作成を心配することなく、スレッドからデータを変更することさえできます。

別の状況では、カスタムウィジェットでリストを表示していて、結果がTONである場合があります。私はあなたがリストにカスタムウィジェットを1000個持っていると、それが常に遅くなることに気付きます。私の同僚が思いついたトリックは、ディスプレイに静的なスロット数を使用している偽の種類のリストを持つことでした。言う、それはビューの10スロットを示しています。スクロールバーは実際にはMOREウィジェットを横切ってスクロールしません...それは10個の可視ウィジェットを介してDATAをスクロールします。あなたはそれを行う狂気のパフォーマンスの向上ができます。しかし、それがあなたのアプリケーションのために受け入れ可能な表示スタイルである場合に限ります。

+0

ネクロのビットですが、これは私が一緒に行く方法です。回答が受け入れられました! – Cryptite

1

QNetworkAccessManagerを使用して画像をロードしていますか?それはキャッシュをサポートしています。また、終了時のコールバックをバックグラウンドですべてロードします。

あなたのダッシュボードが何をしているのか分かりません。 QWebkitの使用について考えましたか?たぶんダッシュボードの内容はHTMLで簡単に実装できますか?

PS。私はPythonのスレッドが好きではありませんし、彼らは良いアイデアだとは思わない。 Qtコアに委任された遅延ジョブがより効果的です。

+1

遅延ジョブと比較して、Pythonのスレッドに対する否定は何ですか? – Remi

+0

全体的に私はPyQtのより深い側面についてまだかなり新しいです。私のアプリケーションはデスクトップアプリケーションなので、QNAMとQWebkitは適用されますか?私が最初に画像をプリロードする方法を理解してから、画像がロードされていないときに何らかの矛盾を避けながら呼び出し元のライブラリを持たせようとしています。 「ダッシュボード」という用語を使用するだけで、さまざまなウィジェットを含むQWidgetを記述することができます。画像とともに埋め込まれたQLabelや、XML文書からデータが読み込まれるラベルがもっとたくさんあります。 – Cryptite

+0

イメージを起動時に一度だけ読み込む必要がある場合は、init中にすべてのQPixmapを辞書に一度作成することができます。それから、それらをウィジェットにスワップアウトするのはスレッドセーフです。スレッドからそれらを作成することはできません。 – jdi

関連する問題