C# 将对象添加到缓存后,正在删除缓存

C# 将对象添加到缓存后,正在删除缓存,c#,asp.net,caching,web-config,C#,Asp.net,Caching,Web Config,我在VS2012中开发asp.net web表单应用程序。我有一个项目是web.App,还有一个项目是类库。 在类库中,我从web.config读取配置(在项目中有很多应用程序设置,如菜单文件的路径、日志文件等),在这个程序集中,我有一个用于缓存事件并将事件记录到文件的类 这是缓存类的一部分: public static class MyCache { public const String CACHE_MENU_USER = "CACHE_MENU_USER_{0}"; pub

我在VS2012中开发asp.net web表单应用程序。我有一个项目是web.App,还有一个项目是类库。 在类库中,我从web.config读取配置(在项目中有很多应用程序设置,如菜单文件的路径、日志文件等),在这个程序集中,我有一个用于缓存事件并将事件记录到文件的类

这是缓存类的一部分:

public static class MyCache
{
    public const String CACHE_MENU_USER = "CACHE_MENU_USER_{0}";
    public const String CACHE_LOG_FILE_PATH = "LOG_FILE_PATH";
    public static void AddToCache(String cacheKey, Object value, DateTime absoluteExpiration, bool loggToFile = true)
    {

        HttpContext.Current.Cache.Add(cacheKey,
                                      value,
                                      null,
                                      absoluteExpiration,
                                      Cache.NoSlidingExpiration,
                                      CacheItemPriority.High,
                                      (k, v, r) => //key, value, reason of remove from cache
                                      {
                                          String reasonOfRemove = String.Empty;
                                          switch (r)
                                          {
                                              case CacheItemRemovedReason.DependencyChanged:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.DependencyChanged");
                                                  break;

                                              case CacheItemRemovedReason.Expired:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Expired");
                                                  break;

                                              case CacheItemRemovedReason.Removed:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Removed");
                                                  break;

                                              case CacheItemRemovedReason.Underused:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Underused");
                                                  break;
                                          }

                                          AppConfiguration.Logger.WriteMessage(String.Format("Key {0} was removed for reason: {1}", cacheKey, reasonOfRemove));
                                      });

        if (loggToFile)
            AppConfiguration.Logger.WriteMessage(String.Format("Insert cache key {0} from now to: {1}", cacheKey, absoluteExpiration));
    }
}
AppConfiguration是一个静态类,其静态属性的值来自web.config。 Logger是Logger类的一个实例

在global.asax中,是一段代码:

protected void Application_Start(object sender, EventArgs e)
    {
        AppConfiguration.ReadConfiguration();
        AppConfiguration.Logger.WriteMessage("Start app");
    }
    protected void Application_End(object sender, EventArgs e)
    {
        AppConfiguration.Logger.WriteMessage("End app");
    }
问题是,每次请求时都会调用App_Start,而缓存中插入的值会立即被删除

这是日志文件的一部分:

10.8.2013 17:14:22:启动应用程序

10.8.2013 17:14:23:插入缓存键缓存菜单用户演示管理员从现在起至:2013年8月17日下午5:14:23

2013年8月10日17:14:23:键缓存\菜单\用户\演示\管理员因以下原因被删除:CacheItemRemovedReason.已删除

2013年8月10日17:14:23:应用程序结束

a每个请求都会重复此操作

我尝试在IIS Express中启动应用程序,我尝试在服务器(IIS7,Windows server 2008 R2)中启动应用程序,但它仍然是一样的

知道cache和global.asax有什么问题吗? 谢谢

编辑:
*问题解决了。更多信息请参见FlopScientist*

中的注释,以显示将项添加到缓存中的函数。我的意思是,在调用MyCache类的上述方法时,你是对的,我忽略了这一点。非常感谢。问题解决了答案不清楚。你到底换了什么?我也有类似的问题。