我在Windows 7上運行VS 2010 Ultimate並嘗試使用MemoryCache(System.Runtime.Caching),出於某種原因,當方法結束並重新運行時,緩存立即清除該方法再次,它試圖創建一個新的。這裏是我使用從MSDN文檔代碼:奇怪的MemoryCache類問題
ObjectCache cache = MemoryCache.Default;
string fileContents = cache["filecontents"] as string;
if (fileContents == null)
{
CacheItemPolicy policy = new CacheItemPolicy();
List<string> filePaths = new List<string>();
filePaths.Add("c:\\Windows\\Enterprise.xml");
// policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
policy.Priority = CacheItemPriority.NotRemovable;
policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(3600);
// Fetch the file contents.
fileContents =
File.ReadAllText("c:\\Windows\\Enterprise.xml");
cache.Set("filecontents", fileContents, policy);
}
Console.WriteLine(fileContents);
我在控制檯Main方法中有此代碼。
令人驚訝的是我有一個包裝C#4.0程序集,我從QTP中使用,它工作得非常好。緩存保留在QTP的每次運行中。
請幫忙。
所以如果這是在Main方法中,程序在這之後關閉還是進入循環? –
控件退出該方法並停止調試器。但是,當我以調試模式再次運行該方法時,它會看到緩存爲空並進入if子句。 Visual Studio IDE仍處於開放狀態。我假設緩存應該保留,因爲我的過期時間設置爲1小時,並且不可移除。 – user766237
我認爲問題在於,雖然您已將其設置爲一小時而不可移除;你從靜態方法中這樣做,這意味着當調試器分離並且垃圾收集時緩存的上下文消失。我只是理論,雖然... –