0

私のC++アプリには、ディレクトリ内のファイルのリストを表示するために使用されるテーブルウィジェットがあります。一度に最大20個のファイルを表示するのに十分な画面領域があります。ビューポートにラップされているため、ユーザーは上下にスクロールしてリスト内の他のファイルに移動できます。

リスト内の各ファイルには、バックグラウンドスレッドにキャッシュされる任意のサイズのメタデータが含まれています。メタデータが豊富なファイルを多数含むディレクトリにすべてのファイルをキャッシュしようとすると、ヒープ上の使用可能なメモリがすぐにいっぱいになり、深刻な結果を招きます。

もちろん、すべてのファイルを一度にキャッシュする必要はありません。見えるものだけ。また、ビューポートの境界のすぐ上/下にメタデータを含むファイルがキャッシュされていれば、上下にスクロールしてもそれほど遅延が発生しないので便利です。

これは、ビューポート(Webブラウザー、テキスト/ 16進エディター)を含む多くのUIアプリケーションが解決しなければならない問題に関連していると思います。この問題の解決に役立つパターン、アルゴリズム、またはコンテナー(deque頭に浮かぶ)はありますか?

ありがとう!

4

2 に答える 2

1

データがa などにある場合、ベクトルへのインデックスであるおよび変数をstd::vector持つことができます。これら 2 つの間のベクトル内のアイテム (包括的) は、キャッシュする必要があるアイテムになります (さらに、各側に X の追加)。first_visiblelast_visible

ユーザーが UI 要素を変更して新しい項目を表示するたびに、それらのインデックスが更新され、必要に応じて新しいデータが読み込まれます。

于 2013-01-03T10:31:01.497 に答える
1

FlyweightProxyの設計パターンをご覧ください。

于 2013-01-03T10:33:52.487 に答える