这几天一直有这样一个问题困扰着,就是我的一个网站在正常访问下缓存是正常调用的,但是当我放到一台并发访问非常大虚拟机上时,通过SQL2005的(性能工具)SQL Server Profiler跟踪发现,所有的被我缓存的数据竟然不在调用缓存,也就是说,C#中所做的文件依赖性的缓存失效了,缓存在被创建之后,第二次访问时就已经被系统过期了.
代码如下:public  Hashtable CatchPrices(string CityCode)
        {            if (HttpContext.Current.Cache[CityCode] == null)
            {                Hashtable CityTable = new Hashtable();
                DbDataReader Reader;
                List<string[]> OutList = new List<string[]>();
                object[] Params = new object[5];
                Params[0] = "*";
                Params[1] = "Prices";                Params[3] = "";
                Params[2] = " City_Code='" + CityCode + "'";
                Reader = ProviderFactory.DataProvider.DataRader(false, out OutList, Params);
                while (Reader.Read())
                {
                    object[] CityInfos = { Reader["City_Code"].ToString(), double.Parse(Reader["Price"].ToString()), double.Parse(Reader["Mileage"].ToString()) };
                    if (!CityTable.Contains(CityCode + Reader["Air_Code"].ToString().Trim().ToUpper() + Reader["Seat_Code"].ToString().Trim().ToUpper()))
                    {
                        CityTable.Add(CityCode + Reader["Air_Code"].ToString().Trim().ToUpper() + Reader["Seat_Code"].ToString().Trim().ToUpper(), CityInfos);
                    }
                }
                Reader.Close();
                Reader.Dispose();
                string CacheFile = ConMan.ConfigInfo.CacheUrl + "/CatchBasePrice_" + CityCode + ".config";
                if (!Util.CheckFiles(CacheFile))
                {
                    Util.CreateFiles(CacheFile, DateTime.Now.ToString());
                }
                
                CacheDependency Dependency = new CacheDependency(CacheFile);
                context.Cache.Insert(CityCode, CityTable, Dependency);
                return CityTable;
            }            else
            {
                return HttpContext.Current.Cache[CityCode] as Hashtable;
            }
        }以上为代码片段,请问,这种方式在并发访问时要如何解决缓存失效的问题.(我缓存的数据基本上一年改不了几条的,但是调用是非常频繁的)谢谢!

解决方案 »

  1.   

    加一个内存条试试,或者存储到application里头去。
      

  2.   


    呵呵,这个难道是要加内存条?
    我并不觉得要加内存条的.另外,缓存也并不是总是失效,偶尔还会有那么几次调用缓存的情况
    但是,这个是不是由于服务器的IIS的环境有关系呢?
    这个问题很头疼(我在我的另一个虚机上就可以正常运用缓存调用)不知道一般在什么样的环境里会出现这种问题,或者是在什么样的服务器配置上会存在这样情况,搞不清楚了
      

  3.   

    看下缓存目录下 CatchBasePrice_xxx.config这些文件的最后修改日期都是什么时候?
    缓存目录有写权限吗?
      

  4.   

    cache在内存紧张的时候,是会被回收掉的,和代码没关系。
    而application则不会被回收。
      

  5.   

    加上缓存试下 cache  加大内存