用于滚动大文件的预读缓存

时间:2013-09-23 16:21:36

标签: java caching scroll

我正在滚动包含大量记录的大型文本文件,每条记录在文件中占用多行。这一切都很好。但是为了提高性能,我想要某种预读缓存(滚动时也可以使用)。

基本上它应该在当前记录之前和之后自动缓存一定量,但不是每个滚动操作都应该触发缓存更改。仅在达到某个限制后才有意义,缓存将被移位。

我有点坚持如何管理这样的缓存,例如,何时触发预读。我可以使用带有LRU的ehcache。 LRU应该自动驱逐正确的entires。问题仍然是如何管理何时驱逐。

寻找一般的想法,语言是Java。

2 个答案:

答案 0 :(得分:2)

circular buffer怎么样?

暂时忽略圆形部分(它画得不太好)......

开始:

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

只要current displayno reload threshold范围内,就不要做任何事情,但是一旦我们达到无重新加载阈值:

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

放弃右侧的内容,在左侧加载更多内容并转移无重新加载阈值,这样我们就能得到与第一张完全相同的图片。

嗯,实际上你可能不必立即丢弃东西,保持它可能是明智的,直到它向左移动,以防万一用户转回到右边(然后你已经加载了数据),但是,在这种情况下,你可能只有一个更大的缓冲区,所以可能只是丢弃它。

这里'左'和'右'是“向下”和“向上”,或“向上”和“向下”。

你必须使用缓冲区大小和阈值。

答案 1 :(得分:0)

大声思考......

假设您要计算已读取的字节数以及当前可见的字节数。

那就是在游标/视图之前和之后有两个缓冲区。向下滚动时,buffer_after光标会减少您在屏幕上显示的字节数。

当buffer_after的大小达到某个较低的数字时,你会触发提前读取并填充缓冲区。