【发布时间】:2012-05-04 23:35:57
【问题描述】:
我目前正在处理一个使用大量文本(数百 MB 到几 GB 的文本 - DBpedia 数据集)的项目。为了节省空间,我将字符串映射到数字并仅在需要打印内容时才使用字符串。为了加快处理数据的算法,我设计了一个Cache 类,用作键值缓存。当然,问题是当程序运行较长时间时,缓存会变得很大。
我目前管理它的方式是将缓存限制为特定数量的条目。该解决方案有效,但效果不佳。一种更灵活的方法是对所有缓存设置一些内存限制,当达到限制时,根据缓存的重要性和大小禁用缓存甚至清空一些缓存。
我正在考虑实现一个 sizeB() 方法,该方法将返回以字节为单位的缓存大小,以便每个实例都可以报告它正在使用的内存量。但这当然不能解决何时停止缓存的问题……我可能不得不手动跟踪所有内存使用情况。也许是一些单身CacheFactory,所有缓存都已注册并且在达到限制时也被清空?
我想知道是否有一些“标准”技术可以做这样的事情。我应该搜索任何成语/模式吗?
另外,最好自己跟踪内存使用情况(似乎更便携但也更费力)或使用一些技术,如在 linux 上读取 /prco/pid 等。
【问题讨论】:
-
您应该限制大小并选择适当的算法来用新条目替换旧条目。 en.wikipedia.org/wiki/Cache_algorithms
标签: c++ memory memory-management