我目前正在使用Oracle數據庫(使用EntitySpaces ORM)處理ASP.NET報告應用程序(C#)。性能/響應對於此應用程序的成功至關重要,因爲它將在幾天內被1000人使用。我非常想避免往返數據庫,因爲我知道這將是一個瓶頸。我的第一個想法(因爲數據庫的物理大小相對較小)只是將所有數據庫對象緩存在應用程序緩存中,並根據需要從緩存中查詢它們。當ASP.NET開始從緩存中刪除項目時,我很快意識到我的邏輯存在缺陷 - 可能是因爲正在使用太多的內存。在ASP.NET中存儲和訪問對象/集合的指導
是否有另一種/更好的方法來做到這一點?當應用程序啓動時,是否存在另一種存儲靜態集合的方法,我可以保證不會被垃圾回收佔用?我很瞭解頁面級別的緩存,但這並沒有多大幫助,因爲我基本上構建了一系列對每個用戶都是唯一的特別報告。
編輯:只是爲了進一步澄清,緩存的所有數據的大小是< 5 MB。這個想法是緩存所有的對象,然後用linq過濾集合。
你在做任何數據分頁?允許人們放置過濾器?我們在說多少行?不管你選擇什麼方法,都有權衡。有些選擇以內存爲代價提供性能,其他則以犧牲磁盤空間爲代價提供性能。請記住,取決於您的應用程序池設置(在X時間或X內存或X CPU之後回收),整個應用程序池可能會重複使用刪除所有緩存項目,導致緩存應用程序內存無用。 – 2012-02-17 04:24:25
您可以使用一些外部緩存服務器,如NOSQL dbs。這是相當容易實現的,它不需要太多的代碼改變。他們中的很多是免費和開源的。如果您對這些選項感興趣,請告訴我,我可以將您指向幾個網站。 – ASetty 2012-02-17 07:36:21
我在上面稍微澄清了這個問題。最新的想法是繼續使用應用程序緩存,但使用CacheItemPriority.NotRemovable選項。 – 2012-02-17 16:59:22