在写代码时,习惯性的用了
lock (searchLock)
{
.......................
}
刚开始也没发现有什么不妥,可后来发现效率上有点问题。原因是lock会在外面等直到占用的线程退出下一个线程才能进去,当有大批量的数据访问时容易造成阻塞。而Monitor.TryEnter无论有没有获取对象锁都会返回结果。于是将代码改为如下:
if (Monitor .TryEnter(searchLock))
{
try //注意一定要try呀
{
//do somthing
}
finally
{
Monitor.Exit(searchLock);
}
}
else
{
//other
}
网友评论