【发布时间】:2010-10-17 15:34:10
【问题描述】:
在我的类中需要一个需要计算和缓存的属性是很常见的。
通常我使用一个锁和一个布尔值来检查它是否被处理。有时我会在访问器中这样做。
这种方法对性能有何影响?有没有更好的方法。
我对此的常用方法的示例代码:
Sub Main()
Dim X AS New X()
For i AS Integer = 0 To 50
Dim Thr AS New Threading.Thread(ADdressOF X.ProcessData )
Thr.Start()
Next
End Sub
Private Class X
Private DataCached AS Boolean
Private ProcessedData AS String
Private Lock AS New Object()
Public Function ProcessData() AS String
Synclock Lock
IF NOT DataCached Then
DataCached = True
ProcessedData = DoStuff()
End If
End Synclock
Console.Writeline(ProcessedData)
Return ProcessedData
End Function
Function DoStuff() AS String
Threading.Thread.Sleep(1000)
Console.Writeline("Processed")
return "stuff"
End Function
End Class
编辑:
这是访问时需要计算的东西,因为它一直在变化。构造函数计算在这里没有帮助。 (示例是我所做工作的真正简化版本)
【问题讨论】:
标签: .net multithreading caching locking