某个类已经单例是缓存的操作类用户 对于同一个缓存的KEY值的设置和删除 要有顺序 。不然会出问题。这个时候要怎么控制啊?= =详细点,新手请见谅= =
解决方案 »
- asp.net 能不能根据指定的SessionID清除Session
- dataList 分页问题
- string Name = Request.QueryString["Name"].ToString();问题
- 空字符串插入SQL数据库之后,结果变成了1900-00-01,该如何防止这个问题的发生呢?
- 页面使用frame时,怎样只显示其中的一个frame?以及frame的初始化问题。
- 我在打开以前项目的时候提示:使用了非本地地址,不能调试,原因是以前的程序中用了127.0.0.1,而现在的环境必须使用localhost
- sql语句问题
- 请问如何实现二次查询?
- 为什么,我取得了一个datareader之后,用MyData.GetString(1).ToString();得不到值呢,用DataList1.DataSource=MyData;就可以得到?
- 生了一个女儿,庆祝一下!
- js push值为空?这个jquery插件DataTables真心不好用啊。
- vs2005和数据库连接问题,大家帮忙看下,坐等!
Monitor.TryEnter()和
Monitor.Exit()
不要用lock
http://msdn.microsoft.com/en-us/library/4tssbxcw.aspx
我要怎么判断 他们调用的是不是同一个KEY呢= =定义一个全局的变量来存储么如果是同一个 然后再看之前声明的锁开了没 这样么?
这个是最好的方法吗 从性能上来讲
if (Monitor.TryEnter(OBJ))
{
try
{
这里可以对OBJ进行操作吗?
}
finally
{
Monitor.Exit(OBJ);
}
}
)如果 不EXIT 方法中就不能对 OBJ操作了吧?那就要定义一个 方法1和方法2都能访问的变量来储存这个OBJ 吧?
你的需求跟互斥没什么关系,对于同一个缓存的KEY值的设置和删除为什么要有顺序?
/// 设置当前应用程序指定CacheKey的Cache值
/// </summary>
public bool SetCache(string CacheKey, object obj)
{
if (Monitor.TryEnter(obj))
{
try
{
HttpRuntime.Cache.Insert(CacheKey, obj);
}
catch (ArgumentNullException)
{
return false;
}
finally
{
Monitor.Exit(obj);
}
return true;
}
return false;
} /// <summary>
/// 清除对应KEY值的Cache
/// </summary>
public bool RemoveCache(string CacheKey)
{
Object obj = GetCache(CacheKey);
if (obj == null)
{
return true;
}
else
{
if (Monitor.TryEnter(obj))
{
try
{
HttpRuntime.Cache.Remove(CacheKey);;
}
catch (Exception)
{
return false;
}
finally
{
Monitor.Exit(obj);
}
return true;
}
return false;
}
}
Monitor.TryEnter(obj,3000)//尝试3秒
否则和用lock 是一样的,还会有锁等待
具体用那个要看需求而定.你现在锁的对象粒度太大了, 所有cache的增加都回等待