这基本上就可以了。没有真正好的策略。如果存在多个竞争应用程序,这可能会导致缓存竞争和错误驱逐。
如果您选择的阈值太低,则会浪费缓存空间。如果它太高,则内存中可能无法容纳任何其他内容,包括文件缓存、DLL...
“可用物理内存”是什么意思?您是指已安装的内存还是可用的内存?应用程序如何使用 80% 的可用内存?我不清楚您使用的定义。
SQL Server 会一直使用内存,直到操作系统发出内存不足的信号(我相信当 95% 的“某物”正在使用时就会发生这种情况)。
您当然不想使用 GC 来释放内存。它通常会杀死你的整个缓存。
也许您可以将缓存内容完全移至磁盘?或者,您可以通过拥有可由应用程序进程查询的隐藏缓存服务器进程来在 .NET 进程之间共享缓存。
我想强调的是,如果您的应用程序消耗了 99% 的已安装 RAM(作为示例),性能将非常糟糕,因为文件缓存几乎为空。这意味着即使是 DLL 和 .NET NGEN 代码也会频繁地调出和调入。
也许更好的策略是假设需要 1GB 来适当缓存操作系统和应用程序文件。因此,您可以消耗内存,直到已安装的 RAM 只剩下 10% 的可用空间减去 1 GB。