内存消耗管理策略

Strategy for memory consumption management

我们正在设计一个从后端缓存大量数据的企业应用程序。允许用户打开任意数量的应用程序 windows,每个应用程序加载并缓存自己的数据。为了以某种方式管理内存消耗并防止整体 OS 性能下降,我们决定编写一个缓存管理器,它将自动监控应用程序的内存占用并在需要时从缓存中删除数据。

所以问题是我们很难确定是否到了释放内存的时间。目前我们使用一种非常简单的方法——当应用程序的内存使用量超过物理内存的 80% 时,我们就开始从缓存中丢弃内容。

是否有任何(替代方案?)处理此类问题的既定做法?

这样基本就可以了。没有真正好的策略。如果有多个竞争应用程序,这可能会导致缓存竞争和错误驱逐。

如果您选择的阈值太低,则会浪费缓存 space。如果它太高,则没有其他内容可能适合内存,包括文件缓存、DLL、...

"available physical memory" 是什么意思?您是指已安装的内存还是免费的内存?应用程序如何使用 80% 的可用内存?我不清楚你使用的定义。

SQL 服务器使用内存,直到 OS 发出内存不足的信号(我相信当 "something" 的 95% 被使用时会发生这种情况)。

您肯定不想使用GC 来释放内存。它会定期杀死你的整个缓存。

也许您可以将缓存内容完全移动到磁盘?或者,您可以通过隐藏的缓存服务器进程共享 .NET 进程之间的缓存,应用进程可以查询该进程。


我想强调的是,如果您的应用占用了已安装 RAM 的 99%(作为示例),性能将非常糟糕,因为文件缓存几乎是空的。这意味着即使是 DLL 和 .NET NGEN 代码也会被频繁调出和调入。

也许更好的策略是假设需要 1GB 来适当缓存 OS 和应用程序文件。因此,您可以消耗内存,直到只有 10% 可用的已安装 RAM 减去 1 GB。