我实现了这样的循环链表:
// MonitoringDictionary is a ConcurrentDictionary<MonitorKey, LinkedList<MonitorValue>>
var value = ProjectValues.MonitoringDictionary[key];
var monitorValue = new MonitorValue(filePath + "." + memberName + " line:" + lineNumber, executionTime);
if (value.Count >= 5000)
{
value.RemoveLast();
value.AddFirst(monitorValue);
}
else
{
value.AddLast(monitorValue);
}
但有时当我尝试执行此行时:value.RemoveLast();
会抛出异常:
System.NullReferenceException:未将对象引用设置为实例 一个对象。在 System.Collections.Generic.LinkedList
1.InternalRemoveNode(LinkedListNode
1 在Shared.WebService.Log.Monitoring(Double executionTime,String。) filePath,String memberName,Int32 lineNumber)
所以我决定在删除最后一项之前锁定链表:
lock (value)
{
if (value.Count >= 5000)
{
value.RemoveLast();
value.AddFirst(monitorValue);
}
else
{
value.AddLast(monitorValue);
}
}
但现在我担心表现和死胡同,所以这是我的问题:
1-锁定链表是否解决了问题?
2-实施循环链表是否有更好的做法?(性能是我的第一要务)
谢谢。