0

Dataコードの実行時に何千ものインスタンス (オブジェクト)を持つクラス (C++) を呼び出します。DataWidgetオブジェクトの属性を表示するウィジェット(Qt)があります。ウィジェットを迅速に作成するために、オブジェクト属性をファイルに書き込んで、ウィジェットにそのファイルの属性を解析させました。このアプローチは機能しますが、スケーラブルでもきれいでもありません。

より明確にするために、私の要件は次のとおりです
。1 -DataWidget複数の異なるDataオブジェクトの属性を一度に表示できる必要があります
2 - 1 秒あたりDataWidget数千のDataオブジェクトを表示できる必要があります
3 -新しいオブジェクトDataWidgetを生成するコードと一緒に実行する必要があります4 - 各オブジェクトは、ファイル/データベースに永続的に保存する必要がありますData
Data

現在、GUI が作成され、DataWidgetが作成された後、実験が実行され、何千ものDataオブジェクトが生成されます (それらの一部を定期的にファイルに書き込みます)。実験の実行後、DataWidget最後Dataにファイルに書き込まれたオブジェクトが表示されます (それらは XML ファイルに書き込まれます)。

現在のファイル アプローチでは、実験の実行後に複数のファイルを取得することで(1)を満たすことができます。実験は に関連付けられていないため、同時実行性がないため、新しいファイルが存在することを に通知するシグナルを追加するまで(3)DataWidgetは実行できません。DataWidget

私は 2 つの理由でこのアプローチを進めていません。まず、ファイルがすぐにディスクに書き込まれなくても、キャッシュ システム実装しない限り、この方法がスケーラブルであるとは想像できません。車輪の再発明ですか?次に、Dataグラフ データ構造のラッパーであり、Graphml を使用して (Boost グラフ ライブラリ、つまりwrite_graphml()を介して) 構造を XML ファイルに書き込み、Boost のread_graphml()で構造を読み戻す必要があります。ファイルをオブジェクトに読み込みDataます...つまり、プログラムの実験部分がオブジェクトを XML にエンコードし、XML をファイルに書き込みます (ただし、できればディスクではなくメモリに書き込みます)。DataWidgetファイルから XML を読み取り、それをオブジェクトにデコードします。

すべてのキャッシングなどを処理するデータベースを使用する必要があるように思えます。さらに、ファイル/データベースのステップをスキップして、プログラム内の に渡すことができるように思われますData(DataWidgetおそらくへの参照を渡します)。のリストData)。それでも、Dataファイル/データベースへの保存手順は完全に無意味ではありません。間違ったタイミングで間違った方法で使用しているだけです。

私の要件を考えると、より良いアプローチは何ですか?

このようなデータを処理および表示するための一般的なリソースやガイドラインはありますか?

4

3 に答える 3

1

すべてのデータ項目がメモリに収まる場合は、それらをベクター/リストに入れて、それへの参照を DataWidget に渡します。それらを保存するときは、シリアル化メソッドへの参照を渡します。次に、実験は、他のプロセスが使用するデータ構造を設定するだけです。

于 2009-04-24T15:21:05.823 に答える
1

すべてのキャッシュなどを処理するデータベースを使用する必要があるように思えます。さらに、ファイル/データベースのステップをスキップして、データをプログラムの DataWidget に渡すことができるように思われます (おそらく、データのリストへの参照)。それでも、データをファイル/データベースに保存する手順は完全に無意味というわけではありません。間違ったタイミングで間違った方法で使用しているだけです。

急速に変化するデータを表示する必要がある場合、中間ファイルまたはデータベースを使用すると速度が低下し、ボトルネックになる可能性があります。ウィジェットは、新しく生成されたデータをメモリから直接読み取る必要があると思います。これは、ファイルまたはデータベースにデータを保存することを妨げるものではありませんが、別のスレッド/プロセスで実行できます。

于 2009-04-24T15:04:23.210 に答える
1

Qtを使用しているようです。Qt 4.0 以降には強力なモデル/ビュー フレームワークが含まれているため、これは良いことです。そして、これがあなたの望むものだと思います。

モデル/ビュー

基本的に、必要Dataなモデルの種類に応じて、クラスに QAbstractItemModel または別の Qt Model クラスを継承して実装させます。次に、ビュー ウィジェット (ほとんどの場合 QListView) をDataモデルに使用するように設定します。

彼らのサイトには多くの例があり、このソリューションは大規模なデータ セットにうまく対応しています。

追加: labs.trolltech.com のこのモデル テスト コードは非常に便利です。

http://labs.trolltech.com/page/Projects/Itemview/Modeltest

于 2009-04-24T17:02:29.997 に答える