我有以下代码。当部署到服务器,我得到例外,这个对象已经存在于字典。尽管如此,我做了双重锁定,同步并没有很好地发挥作用。实现这个最好的方法是什么?我怎样才能最好地锁定访问本节?我应该实现一个单例类并将方法放在那里?锁定和简单缓存
我应该锁定集合还是互斥锁?
NO我不是基于.NET 4
正如你所看到的,我想要做基于日期时间一个简单的缓存。
// within the class.
IDictionary<id, MyObj> _mydict = new Dictionary<string, MyObj>();
object mutex = new object;
//within some method comes the following
if (_mydict.TryGetValue(id, out myobj))
{
DateTime now = DateTime.Now;
DateTime expiry = myobj.Timestamp;
TimeSpan span = now.Subtract(expiry);
if (span.Minutes 0)
{
lock (mutex)
{
myobj= DataAccess.GetMyObj(id);
_mydict[id] = myobj;
}
return myobj;
}
else
{
return myobj;
}
}
else
{
lock (mutex)
{
if (_mydict.TryGetValue(id, out myobj))
{
return myobj;
}
else
{
lock (mutex)
{
myobj = DataAccess.GetMyObj(id);
_mydict[id] = myobj;
}
return myobj;
}
}
}
如若第二个到最后的代码行是'_myDict.Add(id,myobj)'? – 2011-03-01 01:10:28
它有关系吗?我得到“这个项目已经在集合中”,这就是我为什么这样做的原因。 – DarthVader 2011-03-01 01:22:26
如果我们看不到**完全**你在做什么,很难说出什么问题。 – 2011-03-01 02:20:11