Весьма распространено, что мне нужно свойство в моем классе, которое необходимо вычислить и кэшировать.Рекомендации по оптимальному переходу на один раз
Обычно я использую замок и булево верхний чек, если он обработан или нет. Иногда я делаю это в аксессуарах.
Что производительность хит этого подхода? Есть ли лучший способ.
Пример кода моего общего подхода к этому:
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
EDIT:
Это то, что необходимо рассчитать, когда доступ, поскольку она постоянно меняется. Расчет конструктора здесь не помогает. (образец - действительно упрощенная версия того, что я делаю)
Это хороший момент, в худшем случае это будет рассчитано 3 раза. Я уверен, что не более того. –
(см. Обновление для того, чтобы он никогда не был пересчитан без использования блокировок) –
@ Маркс, даже если нет блокировки, я все еще предполагаю, что внутри есть замок, не так ли? –