C#:使用锁

时间:2016-07-05 03:58:33

标签: c# performance locking

您好我有一个应用程序,它保存笔划列表并指向页面。用户将不断更新到他们的设备。

List<data> li = null;

lock (locks) {
   li = dataList.ToList();       
} 

var a = li.ToDataListStruct();

blah ....

这会比下面的效率更高:

 lock (locks) {
       var a = li.ToDataListStruct();

        blah ....
    }

ToDataListStruct将列表中的一个对象映射到一种对象并返回一个新的List。

这是服务器端。前一个:仅在调用ToList函数时被锁定,而使用新列表的其余代码将不被锁定。第二个:它锁定了整个代码。

第一个是否比最后一个有更好的表现

1 个答案:

答案 0 :(得分:1)

阻止他人的锁定越少越好。

当然,C#标准库有并发集合。

查看System.Collections.Concurrent名称空间。

ConcurrentQueue<data> queue = new ConcurrentQueue<data>();

foreach (data item in queue)
{
    blah...
}

并发集合为您处理锁定和版本控制。