0

多数のレコードを含む大きなテキスト ファイルをスクロールしていますが、各レコードにはファイル内で複数の行が必要です。これはすべて正常に機能します。ただし、パフォーマンスを向上させるために、ある種の先読みキャッシュが必要です (スクロールアップ時にも機能します)。

基本的に、現在のレコードの前後に一定量を自動的にキャッシュする必要がありますが、スクロール操作ごとにキャッシュの変更をトリガーする必要はありません。つまり、特定の制限に達した後にのみ、キャッシュがシフトされます。

私は、そのようなキャッシュを管理する方法、たとえば、いつ先読みをトリガーするかについて、ちょっと固執しています。LRU で ehcache を使用できます。LRU は、正しい全体を自動的に削除する必要があります。問題は、立ち退きのタイミングをどのように管理するかということです。

一般的なアイデアを探して、言語は Java です。

4

2 に答える 2

2

循環バッファはどうですか?

円形の部分はとりあえず無視(うまく描けない)…

発進:

---------- entire buffered contents ---------
|       ---- no reload threshold ----       |
|       |      current display      |       |
|       |     |               |     |       |

current displayが 内にある限り、no reload threshold何もしませんが、再ロードなしのしきい値に達したら、次のようにします。

---------- entire buffered contents ---------
|       ---- no reload threshold ----       |
|       current display             |       |
|      ||              |            |       |

右側のものを破棄し、左側のものをさらにロードし、リロードなしのしきい値をシフトして、最初の画像とまったく同じ画像が得られるようにします。

実際には、おそらくすぐに右側のものを破棄する必要はありません。ユーザーが代わりに右に戻った場合に備えて、それがさらに左に移動するまで保持するのが賢明かもしれません (その後、すでにロードされたデータ)、しかし、その場合、より大きなバッファーを使用できた可能性があるため、おそらくそれを破棄します。

ここで、「左」と「右」は「下」と「上」、または「上」と「下」です。

バッファサイズとしきい値をいじる必要があります。

于 2013-09-23T16:39:03.950 に答える
0

大声で考えながら…

読み取ったバイト数と現在表示されているバイト数を数えているとします。

つまり、カーソル/ビューの前後に 2 つのバッファーが必要です。下にスクロールすると、 buffer_after カーソルは、画面に表示したバイト数だけ減少します。

そして、 buffer_after のサイズが特定の低い数値に達すると、先読みをトリガーしてバッファーを埋めます。

于 2013-09-23T16:38:49.880 に答える