我在我的应用程序中使用C#lock()来确保我没有两个或多个线程同时执行相同的代码块。在我遇到碰撞后添加了lock(),所以我知道这是可能的,也有不好的事情发生。
现在我正在试图弄清楚如何获得某种反馈/计数器,我可以用它来确定锁被击中的频率。我假设我必须挂进Monitor类才能获得这些信息,但我想我会问是否有人之前已经解决了这个问题?
答案 0 :(得分:3)
根据您是想知道锁定次数还是没有锁定次数,您有两种选择:
答案 1 :(得分:2)
您可以使用performance counters来确定CLR获取线程锁(总争用次数)或每秒速率(争用率/秒)的不成功尝试总数。
https://msdn.microsoft.com/en-us/library/zf749bat(v=vs.110).aspx
请注意,这是总数,因此如果您的应用程序中存在多个线程争用方案,则此方法不会将它们分解为单独的计数。
您可以使用Visual Studio中内置的探查器获取有关并发问题的更多详细信息。如果您使用VS 2015,您可能需要查看Concurrency Visualizer(VS 2017尚未推出)。
答案 2 :(得分:1)
很明显,但告诉你在锁中花了多少时间,这可能比计数更有用:
@IBAction func saveScore(_ sender: Any) {
label.text = label.text
UserDefaults.standard.set(label.text, forKey: "score")
}