asp.net アプリケーションで、静的メソッドまたは asp.net キャッシュを使用してコード実行のオーバーヘッドを削減したい 2 つのパターンを検討しています。それらは次のとおりです。
静的メソッド
Private Shared _transforms As New System.Collections.Generic.Dictionary(Of System.Type, MyObject)() Private Shared Function Load(theType As System.Type) As MyObject Dim lockAquired As Boolean If Not _transforms.ContainsKey(theType) Then Try lockAquired = Monitor.TryEnter(_synchInstanceLock, LOCK_TIME_OUT) '...DO MY MEMORY INTENSIVE TASK HERE _transforms.Add(theType, doc) Catch ex As Exception Throw (ex) Finally If lockAquired = True Then Monitor.Exit(_synchInstanceLock) End If End Try End If Return _transforms(theType)
終了機能
ASP.NET キャッシュ 、注: キャッシュは ASP.NET アプリケーションの単なるラッパーです [""] キャッシュ
Private Function Load(theTypeAs System.Type) As MyObject Dim doc As MyObject = Nothing Dim lockAquired As Boolean Try lockAquired = Monitor.TryEnter(_synchInstanceLock, LOCK_TIME_OUT) Dim key As String = GenerateCacheKey(GetType(MyObject), theType.Name) Dim cacheData As MyObject = TryCast(Cache(key), MyObject) If cacheData Is Nothing Then '...DO MY MEMORY INTENSIVE TASK HERE Cache.Insert(key, doc) Else doc = TryCast(cacheData, MyObject) End If Catch ex As Exception Throw (ex) Finally If lockAquired = True Then Monitor.Exit(_synchInstanceLock) End If End Try Return doc
終了機能
その.NET 3.5用
パフォーマンスとスレッドセーフの点でどちらが優れているかアドバイスしてもらえますか?
ありがとう