您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程

解决Discuz论坛的Discuz.Cache.DNTCache 的AddObject()死循环

易烟2025-07-20Discuz教程已有人查阅

导读在前天,本人刚下了discuzNT的代码,研究了些许时间老是报stackoverflow的error在web.config中发现了这段代码:

在前天,本人刚下了discuzNT的代码,研究了些许时间老是报stackoverflow的error在web.config中发现了这段代码:
<httpModules>
<add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule"/>
</httpModules>
呵呵,就是HttpModule类,好,找到HttpModule.cs,打开在Line48 有这么一句
if (Utils.InArray(Utils.GetCookie("dnttemplateid"), TemplateFactory.GetValidTemplateIDList()))
在执行TemplateFactory.GetValidTemplateIDList()的时候老实报错,就找到在打开发现在执行
cacheService.AddObject("/Forum/TemplateIDList", str);的时候还是报错
接着进去,这是他的具体的方法体
public virtual void AddObject(string xpath, string str)
{
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, str);
}
}
在情况对的时候,首先会进去
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
这时候调用的是
public virtual void AddObject(string xpath, object o)
这个方法,这个方法是没问题的,就是将一些数据插入Cache里面调用完成之后就执行的是
this.AddObject(xpath, str);(public virtual void AddObject(string xpath, string str)
)
大家注意,调用的是自身,是递归好,前面的if-else在执行一遍,回到this.AddObject(xpath, str);还是递归我就他的意思应该是首先插入路径,然后插入实际数据,两次缓存数据,但是实际代码就是这样子为了证明我的想法,我把代码加成这个样子
int i=0;
public virtual void AddObject(string xpath, string str)
{
i++;//计数功能
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, str);
}
}
再次运行,再次报错,一看i达到了2049,Cache给插入了2000多次,怪不得会overflow考虑了一下,改代码如下:
public virtual void AddObject(string xpath, string str)
{
lock (lockHelper)
{
if ((str != null) && (str != ""))
{
this.AddObject(xpath + "flag", CacheFlag.CacheHaveData);
}
else
{
this.AddObject(xpath + "flag", CacheFlag.CacheNoData);
}
this.AddObject(xpath, (object)str);
}
}
在第二次的时候box一下,就直接进入public virtual void AddObject(string xpath, string str)里了这个DNTCache里好多这样的AddObject方法,都是这样的错误至此,运行暂时没问题了不知道大家遇到了这种情况没?
不排除是我的反编工具出的错,我的平台是win2003sp2+sqlserver2005EEsp2+vstssp1

本文标签:

很赞哦! ()

相关源码

  • (自适应响应式)个人作品技术文章博客网站模板下载基于PbootCMS内核开发的响应式博客模板,为数字营销、技术分享类内容打造。采用前沿设计理念,兼顾内容展示与阅读体验,适配各类终端设备。通过本模板可快速构建专业级行业博客,有效传播专业知识与案例成果。查看源码
  • (自适应响应式)装修装潢设计公司网站源码下载本模板为装修设计企业打造,采用PbootCMS内核开发,整体设计突出空间美学与功能性结合。首页采用大图轮播展示工程案例,服务项目模块支持三维效果展示,呈现装修设计企业的专业形象与技术实力。查看源码
  • (自适应)蓝色基建施工工程建筑集团网站pbootcms模板下载为工程建筑、基建施工类企业打造的PbootCMS模板,采用现代化设计理念,突出企业实力与项目展示,帮助建筑类企业快速建立专业在线门户。查看源码
  • (PC+WAP)绿色环保建筑设备通用行业pbootcms源码下载通过模块调整可适配园林景观、装配式建筑、绿色装修等生态建设相关领域。预制绿色建材展示、能耗模拟等专业模块,集成项目案例、环保工艺等建筑行业特色内容结构,测试数据包含LEED认证体系查看源码
  • pbootcms模板(PC+WAP)火锅加盟餐饮美食类带留言源码基于PbootCMS内核深度开发,为火锅、餐饮品牌打造的营销型解决方案。采用红色主题传递行业活力,实现PC与WAP端适配。查看源码
  • (自适应)品牌策划高端设计公司网站pbootcms模板免费下载本模板为品牌策划与设计公司打造,基于PbootCMS内核开发,充分考虑了创意设计行业的视觉展示需求。模板设计风格现代简约,布局合理清晰,呈现设计作品与专业服务,帮助设计公司展示创意实力并吸引潜在客户。查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐