日期:2014-05-18  浏览次数:20402 次

小弟的一个项目用了ASP.NET的Cache,可是调试程序的时候发现Cache的命中率好低
这个Cache基本上是仿照PetShop4.0写的,看一下逻辑层的一段代码,感觉命中率好低啊!
C# code

        public DataTable SelectLsgInfo()
        {
            DataTable myTable = (DataTable)HttpRuntime.Cache[LSG_INFO_WHB];
            if (myTable == null)
            {
                sql = "select lingshigong.id,lsgname,phone,duiname,bianhao from lingshigong, duiinfo where lingshigong.dui_id = duiinfo.id";
                myTable = DbLink.ExecuteDataTable(linkstr1, sql, CommandType.Text);
                AggregateCacheDependency cd = DependencyFacade.GetLsgCache();
                HttpRuntime.Cache.Add(LSG_INFO_WHB, myTable, cd, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30), CacheItemPriority.Low, null);
            }

            return myTable;
        }


==============================================
谢谢各位大虾了!肯定是偶的程序没写好,请大家多帮帮忙.

------解决方案--------------------
怎么知道命中率的?程序每次重新编译执行cache肯定都是空的.
如果有问题,别的好象都看不到明显的问题,那问题可能出在这里:
AggregateCacheDependency cd = DependencyFacade.GetLsgCache();

------解决方案--------------------
这不可能,你的代码可以看到先从Cache取数据,取不到才从数据库取,怎么可能没用呢?
问题有可能在这里,AggregateCacheDependency cd = DependencyFacade.GetLsgCache();
你看看Cache的依赖项是否每次都发生变化吧。
如果你的项目不需要Cache,也可以取消它嘛。