奇怪的MemoryCache类问题

时间:2013-06-19 23:31:07

标签: c# .net-4.0

我在Windows 7上运行VS 2010 Ultimate并尝试使用MemoryCache(System.Runtime.Caching),出于某种原因,当方法结束时以及当我再次重新运行该方法时,会立即清除缓存,它试图创造一个新的。以下是我在MSDN文档中使用的代码:

           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);

我在Console Main方法中有这段代码。

令人惊讶的是我有一个包装C#4.0程序集,我正在使用QTP,它工作得非常好。缓存在QTP中的每次运行中保持不变。

请帮忙。

1 个答案:

答案 0 :(得分:1)

MemoryCache的生命周期与Visual Studio完全没有关联(你在评论中提到“Visual Studio IDE仍处于打开状态。”

缓存仅在程序运行时可用,因此每次停止并重新启动应用程序时,缓存实际上都是空的。更具体地说,它位于AppDomain的上下文中,它是在您启动应用程序时创建的,并在您的应用程序退出时销毁。

只有当您的应用程序运行超过一个小时时,该策略才会生效。