這段代碼在哪裏鎖定了一部分函數是否正確?或者當多個環節同時詢問相同的考試時,它是否會有缺點?在C#.NET中函數的鎖定部分的回顧
目的是首先要求考試的客戶將組裝它,所有下一個客戶將獲得緩存版本。
public Exam GetExamByExamDto(ExamDTO examDto, int languageId)
{
Log.Warn("GetExamByExamDto");
lock (LockString)
{
if (!ContainsExam(examDto.id, languageId))
{
Log.Warn("Assembling ExamDto");
var examAssembler = new ExamAssembler();
var exam = examAssembler.createExam(examDto);
if (AddToCache(exam))
{
_examDictionary.Add(examDto.id + "_" + languageId, exam);
}
Log.Warn("Returning non cached ExamDto");
return exam;
}
}
Log.Warn("Returning cached ExamDto");
return _examDictionary[examDto.id + "_" + languageId];
}
我有一種感覺,這不是做這件事的方法。
THX,安德魯,我現在用你的調整來檢查性能。 – 2010-03-15 15:16:16
你確定'ContainsExam'是線程安全的嗎? – 2010-03-15 15:20:28
啊,我們只是在看你的代碼有問題。它可能不是線程安全的。 – 2010-03-15 17:32:04