0

在我的 C++ 应用程序中,我有一个表格小部件,用于显示目录中的文件列表。有足够的屏幕空间一次显示约 20 个文件。它包裹在视口周围,因此用户可以上下滚动以导航到列表中的其他文件。

列表中的每个文件都包含缓存在后台线程中的任意大小的元数据。尝试缓存包含大量元数据丰富文件的目录中的所有文件会迅速占用堆上的可用内存,从而产生严重后果。

当然,我不需要一次缓存所有文件;只有那些可见的。如果缓存那些包含在视口边界上方/下方的元数据的文件也会很好,这样向上和向下滚动就不会产生太多延迟。

我想这与许多包含视口(Web 浏览器、文本/十六进制编辑器)的 UI 应用程序必须解决的问题有关。是否有任何模式、算法或容器(deque想到)有助于解决这个问题?

谢谢!

4

2 回答 2

1

如果您的数据在例如 astd::vector中,那么您可以拥有作为向量索引的 afirst_visiblelast_visible变量。这两者(包括)之间的向量中的项目将是您需要缓存的项目(每边加上 X 额外)。

每当用户更改 UI 元素以显示新项目时,这些索引都会更新,并在需要时加载新数据。

于 2013-01-03T10:31:01.497 回答
1

您可以查看FlyweightProxy设计模式。

于 2013-01-03T10:33:52.487 回答