我正在處理大型管理應用程序本質上的運行時。正在執行的實際邏輯以及顯示的屏幕和操作的數據存儲在中央數據庫中。爲了提高性能,運行時會將數據庫中的數據保存在各種緩存中。Windows終端用戶應用程序的緩存策略?
然而,這並不總是很清楚這些緩存應該如何管理。目前,只要運行時空閒,某些緩存就會刷新,而其他緩存永遠不會刷新,或者只有在達到可配置的任意限制時才刷新緩存。我們顯然希望儘可能在內存中保留儘可能多的數據,但我不確定如何以與Citrix良好搭配的方式來完成此操作,這對我們的客戶非常重要。
我一直在尋找使用資源通知(CreateMemoryResourceNotification()
)和刷新緩存,如果它表示內存運行低,但恐怕只有這樣做會使事情表現非常糟糕,當運行20 +實例下思傑,有一個實例吞噬了所有的內存,其餘的則不斷沖刷着他們的緩存。
我可以用CreateJobObject()
和朋友設置對高速緩存大小的硬性限制,但如果實例有合理需要大量內存,那麼可能會導致運行時失敗並出現內存不足錯誤。
我可以防止此類問題通過使用單獨的堆緩存數據,但有沒有緩存和非緩存數據之間的明確分離,所以這似乎非常脆弱。
TL; DR:任何人在Windows下管理內存緩存都有什麼好主意?
我們在這裏談論的數據量是多少?是否有數據對於運行時的所有實例都是共同的,還是都是唯一的? – Emiel 2010-10-04 15:06:28
大多數數據實際上可以在實例之間緩存,並且如果從不更改也很少更改。然而,問題在於我不能假設實例可以相互通信,因爲它們所運行的環境通常是非常嚴格的。 – Tabsels 2010-10-04 15:35:14