我正在寻找将键值对存储在静态同步字典(.NET 3.5,因此不是 ConcurrentDictionary)中同时能够同时访问它们的最有效方法。
Dictionary.Add(key, value);
if (Dictionary.Count >= 200)
{
foreach (KeyValuePair<string, Info> pair in Dictionary)
{
Info entry = pair.Value;
StoreInDatabase(entry);
}
Dictionary.Clear();
}
这就是问题所在。如果一个用户正在向字典中添加内容,而另一个用户正在访问并存储到数据库中,则会中断。
lock (Dictionary)
{
//Same Code Above
}
我放了一个锁,它似乎工作正常,但我想知道是否有更有效的方法来做到这一点。它不像我希望的那样有效。我们欢迎所有的建议!
注意:我必须使用 StoreInDatabase 方法来存储值。
修订后的代码:
private static SynchronizedDictionary<string, Info> Dictionary = new SynchronizedDictionary<string, Info>();
...
Dictionary.Add(key, value);
if (Dictionary.Count >= 200)
{
SynchronizedDictionary<string, Info> temporaryDictionary = new SynchronizedDictionary<string, Info>();
lock (Dictionary)
{
temporaryDictionary = Dictionary;
Dictionary.Clear();
}
lock(temporaryDictionary)
{
foreach (KeyValuePair<string, Info> pair in temporaryDictionary)
{
Info entry = pair.Value;
StoreInDatabase(entry);
}
}
}
这大大提高了性能。谢谢flq!