次のコードを書きました
public static class QuizSessionBL
{
#region Private Data
private static ConcurrentDictionary<int, QuizData> _data = new ConcurrentDictionary<int, QuizData>();
#endregion
#region Public Methods
public static void AddOrUpdate(QuizData pQuizData)
{
_data.AddOrUpdate(pQuizData.Quiz.QuizId, pQuizData,
(key, existingVal) =>
{
return existingVal;
});
}
public static bool Retrieve(int pQuizId, out QuizData pQuizData)
{
return _data.TryGetValue(pQuizId, out pQuizData);
}
public static void Remove(int pQuizId)
{
QuizData qd;
_data.TryRemove(pQuizId, out qd);
}
#endregion
}
私の目標は次のとおりです。
- 毎回クエリ DB を使用せずにメモリ内のクイズ データを生徒に提供する。
- AddOrUpdate() メソッドは、クイズの開始時にクイズ管理者によって呼び出されます。
- Remove() メソッドは、管理者がクイズを閉じたいときに呼び出されます。
例 3 コースの 30 人の学生 (各コースの 10 人) が Retrieve() メソッドを同時に呼び出す場合、_data コレクションは各コースに 1 つずつ、3 つのエントリのみを持つ必要があります。
したがって、基本的には上記のコードの効率を知りたい、またはさらに何かを追加する必要があります。議論ではなく、論理/概念の観点からの回答を期待しています。