使用asp.net权限管理系统(FrameWork) 缓存Sys_moduleTreeCache的异常

小大飞 2018-12-06 03:27:58
经常出现的异常,有两个:
1,已添加了相同的键异常;
2,索引超出了数组界限。 在 System.Collections.Generic.Dictionary`2.Resize

自己虽然对异常也有自己的理解,但是毕竟这个框架比较高大上,而且已经在很多项目中使用,自己不敢盲目修复。所以求助。
以下贴出主要的代码:

1,FrameWorkCache类
========================================
using System;
using System.Collections.Generic;
using System.Text;

namespace MS.FrameWork
{
/// <summary>
/// MS.FrameWork缓存类
/// </summary>
public class FrameWorkCache
{
private static IFrameWorkCache _FrameWorkCache = null;

static FrameWorkCache()
{
_FrameWorkCache = (IFrameWorkCache)Activator.CreateInstance(Commom.GetCachenamespace, Commom.GetCacheclassName).Unwrap();
}

/// <summary>
/// 在线用户接口
/// </summary>
/// <returns>IFrameWorkOnline实现类</returns>
public static IFrameWorkCache Instance()
{
return _FrameWorkCache;
}
}
}

Commom.GetCachenamespace, Commom.GetCacheclassName读的是Web.config中的配置
<!--缓存类配置(命名空间) FrameWorkCache-->
<add key="Cachenamespace" value="MS.FrameWork"/>
<!--缓存类配置(类名) FrameWorkCache-->
<add key="CacheclassName" value="MS.FrameWork.HttpWebCache"/>
-------------------------------------------------------------------------------------------

2,类HttpWebCache,IFrameWorkCache是个接口,内容和HttpWebCache内容差不多。
=========================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Caching;
namespace MS.FrameWork
{
/// <summary>
/// Asp.Net Web缓存
/// </summary>
public class HttpWebCache:IFrameWorkCache
{
/// <summary>
/// WebCache
/// </summary>
private Cache _Cache = HttpRuntime.Cache;

/// <summary>
/// 插入值
/// </summary>
/// <param name="key">key</param>
/// <param name="o">值</param>
public void Insert(string key, object o)
{
_Cache.Insert(key, o);
}

/// <summary>
/// 移除值
/// </summary>
/// <param name="key">key</param>
public void Remove(string key)
{
_Cache.Remove(key);
}

/// <summary>
/// 获得值
/// </summary>
/// <param name="key">键值</param>
/// <returns>返回值</returns>
public object this[string key]
{
get {
return _Cache[key];
}
}

/// <summary>
/// 获得使用缓存总数
/// </summary>
public int Count
{
get {
return _Cache.Count;
}
}

/// <summary>
/// 获得剩余缓存大小
/// </summary>
public string Remains
{
get {
return string.Format("{0}M",_Cache.EffectivePrivateBytesLimit / 1024 / 1024);
}
}

/// <summary>
/// 根据key获得值
/// </summary>
/// <param name="key"></param>
/// <param name="o"></param>
/// <returns></returns>
public bool TryGetValue(string key, out object o)
{
o=_Cache[key];
return ContainsKey(key);
}

/// <summary>
/// 检测是否存在当前key
/// </summary>
/// <param name="key">key</param>
/// <returns>存在/不存在</returns>
public bool ContainsKey(string key)
{
if (_Cache[key] == null)
{
return false;
}
else
{
return true;
}
}
}
}

------------------------------------------------------------------------------------------------

3,类 sys_Module_Cache中有个方法,被调用时,过一段时间就会出异常
=============================================================
/// <summary>
/// 设置模块缓存
/// </summary>
/// <param name="m">设置模块</param>
static void setModuleCache(sys_ModuleTable m)
{
if (!Sys_moduleCache.ContainsKey(m.ModuleID))
{
Sys_moduleCache.Add(m.ModuleID, m); //初始化模块缓存
}

if (Sys_moduleTreeCache.ContainsKey(m.ModuleID))
{
Sys_moduleTreeCache.Remove(m.ModuleID);
}
Sys_moduleTreeCache.Add(m.ModuleID, new List<sys_ModuleTable>()); //初始化树状模块缓存
}


if (Sys_moduleTreeCache.ContainsKey(m.ModuleID))
{
Sys_moduleTreeCache.Remove(m.ModuleID);
}
Sys_moduleTreeCache.Add(m.ModuleID, new List<sys_ModuleTable>()); //初始化树状模块缓存

异常就是这段代码报的,不知道该怎么修复,这个框架是不是有点问题?HttpRuntime.Cache这个类,可以反射使用吗?

...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧