这几天一直有这样一个问题困扰着,就是我的一个网站在正常访问下缓存是正常调用的,但是当我放到一台并发访问非常大虚拟机上时,通过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;
}
}以上为代码片段,请问,这种方式在并发访问时要如何解决缓存失效的问题.(我缓存的数据基本上一年改不了几条的,但是调用是非常频繁的)谢谢!
代码如下: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;
}
}以上为代码片段,请问,这种方式在并发访问时要如何解决缓存失效的问题.(我缓存的数据基本上一年改不了几条的,但是调用是非常频繁的)谢谢!
呵呵,这个难道是要加内存条?
我并不觉得要加内存条的.另外,缓存也并不是总是失效,偶尔还会有那么几次调用缓存的情况
但是,这个是不是由于服务器的IIS的环境有关系呢?
这个问题很头疼(我在我的另一个虚机上就可以正常运用缓存调用)不知道一般在什么样的环境里会出现这种问题,或者是在什么样的服务器配置上会存在这样情况,搞不清楚了
缓存目录有写权限吗?
而application则不会被回收。