2014-11-20 65 views
0

我一直在對網站進行一些更改,並注意到當我在數據庫中進行更改時,即。添加新的人物價值,該人物的名字不會出現在下拉列表中。瞭解HttpContext.Current.Cache

如果我重置應用程序池幾次,名字終於出現在我身上。雖然對其他人來說似乎並不總是如此。

它似乎被緩存嚴格的控制,我已經找到了以下內容:

HttpContext.Current.Cache.Insert("PersohnList", d, Nothing, 
     DateTime.MaxValue, New System.TimeSpan(0, 30, 0), 
     Caching.CacheItemPriority.High, Nothing) 

我在這裏感興趣注意到了一些值,

a) DateTime.MaxValue 
b) New System.TimeSpan(0, 30, 0) 

將緩存過期在30分鐘後插入新的人的姓名或將由於DateTime.MaxValue而不會過期。

任何想法?

+0

你是否明確緩存列表?我不認爲它默認緩存。它最初是如何初始化的?如果它被填充,讓我們說Page_Load,然後在每次刷新/新建會話時它都會進行數據庫調用。如果你將它保存在服務器端的某個地方,這是一個完全不同的問題。 – PoweredByOrange 2014-11-20 17:08:33

+0

您是否閱讀過[插入](http://msdn.microsoft.com/zh-cn/library/05kd8d77(v = vs.110).aspx)的MSDN頁面?另外,它在應用程序池的多次重置中仍然存在,這聽起來像您的問題緩存在客戶端而不是服務器端。 – 2014-11-20 17:10:11

回答

1

我不確定哪個會勝出。看來這個代碼正在設置slidingExpiration和absoluteExpiration。我會假設後者會贏得這場比賽,但MSDN documentation說,你應該只使用其中一個。如果使用slidingExpiration,則應將absoluteExpiration參數設置爲NoAbsoluteExpiration,如果使用absoluteExpiration,則應將slidingExpiration設置爲NoSlidingExpiration

如果我是你,當更新數值(HttpContext.Current.Cache.Remove("PersohnList")時,我會使緩存無效並重新設置。

+0

Tbh ..不知道哪個會勝出。我會接受你的答案,因爲我不確定兩者都需要設置。無論如何,請按照MSDN。決定重新修改緩存列表的工作方式。儘管重置應用程序池並清除瀏覽器上的緩存功能仍然有效。我想我注意到了這個問題的一個錯誤,這可以解釋爲什麼我有這個問題。 – thegunner 2014-11-21 23:56:37

0

+1滑動窗口。每當其他用戶觸摸該密鑰「PersohnList」時,緩存過期又增加了30分鐘。此外,檢查出System.Runtime.Caching作爲一個更現代的選擇。

http://msdn.microsoft.com/en-us/library/system.runtime.caching%28v=vs.110%29.aspx

「的System.Runtime.Caching命名空間包含讓你在.NET框架應用程序中實現的緩存類型。

此命名空間中的類提供了一種使用緩存設施,如那些在ASP .NET,但沒有依賴於System.Web程序集。「