Public ReadOnly Property Thing(i as long) as double(,)
Get
Return SomeCalculation(i)
End Get
End Property
をし、コードが多く回プロパティを呼び出す行った後に(同じで私を取得別のiscenなどと同じです)、新しいiを使用するか、毎回再計算されるまで結果はキャッシュされますか?
ありがとうございます!
Public ReadOnly Property Thing(i as long) as double(,)
Get
Return SomeCalculation(i)
End Get
End Property
をし、コードが多く回プロパティを呼び出す行った後に(同じで私を取得別のiscenなどと同じです)、新しいiを使用するか、毎回再計算されるまで結果はキャッシュされますか?
ありがとうございます!
いいえ繰り返し計算の結果を格納するためにVB.NETに自動キャッシュはありません。何らかのキャッシュを提供するのはあなた次第です。あなたはもちろん辞書
Dim cache As Dictionary(Of Long, Double(,)) = New Dictionary(Of Long, Double(,))
Public ReadOnly Property Thing(i as long) as double(,)
Get
Dim result As Double(,)
If Not cache.TryGetValue(i, result) Then
result = SomeCalculation(i)
cache.Add(i, result)
End If
Return result
End Get
End Property
を使用することができる。例えば
は、任意の簡単な解決策として、考慮すべきいくつかのポイントがある:
'Lazy
@CodyGray興味深い。私はそれに慣れていない。例を教えてください。 – Steve
'Lazy
あなたはこのようにそれを使用する必要がありますキャッシュされた値
Public Class LongCaches(Of MyType)
Protected MyDictionary Dictionary(Of Long, MyType) = New Dictionary(Of Long, MyType)
Public Delegate Function MyFunction(Of Long) As MyType
Protected MyDelegate As MyFunction
Public Calculate As Function(ByVal input As Long) As MyType
If Not MyDictionary.ContainsKey(input) Then
MyDictionary(input) = MyFunction.Invoke(input)
End If
Return MyDictionary(input)
End Function
Public Sub New(ByVal myfunc As MyFunction)
MyDelegate = myfunc
End Sub
End Caches
のクラス作成することができます。
Private _MyLongCacheProperty As LongCaches(Of Double(,))
Protected ReadOnly MyLongCacheProperty(i As Long) As LongCaches
Get
If _MyLongCacheProperty Is Nothing Then
_MyLongCacheProperty = New LongCaches(Of Double(,))(AddressOf SomeCalculation)
End If
Return _MyLongCacheProperty.Calculate(i)
End Get
End Property
お知らせ:構文エラーがある場合、このコードは、テストされていないし、してください、コメントや編集はdownvoteではなく
毎回再計算されます。キャッシングの自動提供はありません。 – Steve
プロパティは単なる構文的な砂糖であり、1つまたは2つのメソッドとして実装されます。メソッドの結果は暗黙的にキャッシュされません。私はそれがおそらく財産ではなく、むしろ混乱することのない方法でなければならないと言っています。 – jmcilhinney
両方に感謝します。あなたはそれを答えとして入れて、質問に答えがつけられるようにしますか? – Pierre