我正在处理大型管理应用程序本质上的运行时。正在执行的实际逻辑以及显示的屏幕和操作的数据存储在中央数据库中。为了提高性能,运行时会将数据库中的数据保存在各种缓存中。Windows终端用户应用程序的缓存策略?
然而,这并不总是很清楚这些缓存应该如何管理。目前,只要运行时空闲,某些缓存就会刷新,而其他缓存永远不会刷新,或者只有在达到可配置的任意限制时才刷新缓存。我们显然希望尽可能在内存中保留尽可能多的数据,但我不确定如何以与Citrix良好搭配的方式来完成此操作,这对我们的客户非常重要。
我一直在寻找使用资源通知(CreateMemoryResourceNotification()
)和刷新缓存,如果它表示内存运行低,但恐怕只有这样做会使事情表现非常糟糕,当运行20 +实例下思杰,有一个实例吞噬了所有的内存,其余的则不断冲刷着他们的缓存。
我可以用CreateJobObject()
和朋友设置对高速缓存大小的硬性限制,但如果实例有合理需要大量内存,那么可能会导致运行时失败并出现内存不足错误。
我可以防止此类问题通过使用单独的堆缓存数据,但有没有缓存和非缓存数据之间的明确分离,所以这似乎非常脆弱。
TL; DR:任何人在Windows下管理内存缓存都有什么好主意?
我们在这里谈论的数据量是多少?是否有数据对于运行时的所有实例都是共同的,还是都是唯一的? – Emiel 2010-10-04 15:06:28
大多数数据实际上可以在实例之间缓存,并且如果从不更改也很少更改。然而,问题在于我不能假设实例可以相互通信,因为它们所运行的环境通常是非常严格的。 – Tabsels 2010-10-04 15:35:14