我有一个用c#编写的多线程应用程序。我注意到,使用lock(this)方法实现线程同步会使应用程序减慢20%。这是预期的行为还是我应该更接近实施?
答案 0 :(得分:2)
锁定会增加一些开销,这是无法避免的。现在你的一些线程很可能会等待释放资源,而不是只是在他们想要的时候抓住它们。如果你正确地实现了线程同步,那么这是一件好事。
但总的来说,如果没有关于申请的深入了解,你的问题就无法回答。 20%的减速可能没问题,但你的锁定可能过于宽泛,然后程序会(通常)变慢。
另外,请不要使用锁(这个)。如果您的实例被传递并且其他人锁定了引用,那么您将遇到死锁。最佳做法是锁定其他人无法访问的私有对象。
答案 1 :(得分:0)
根据lock()语句的粗略或粒度,您确实可以影响MT应用程序的性能。只锁定你真正知道应该被锁定的东西。
答案 2 :(得分:0)
任何同步都会降低多线程的速度。
话虽如此,lock(this)
真的不是一个好主意。除非可能,否则应始终锁定用于除了同步之外的私有对象。
确保将锁定保持在最低限度,并且只能在尽可能短的时间内保持锁定。这将有助于将“减速”降至最低。
答案 3 :(得分:0)
您可以在Windows中监视performance counters以查看应用程序花费多少时间争夺锁定。