キーと値のペアを静的な同期ディクショナリ(.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に感謝します!