マルチスレッド アプリケーションで使用される List(of T) を含むクラスがあります。Get、Add、Remove の 3 つのメソッドがあり、List(of T) にアクセスして変更します。オブジェクトを追加または削除するときだけでなく、必要なオブジェクトを照会するときはいつでも、SyncLock を使用して m_List をロックしていました。 ただし、目的のオブジェクトを検索するときとは対照的に、オブジェクトを追加または削除するときに m_List をロックするだけでパフォーマンスが向上するかどうかについて興味がありますか?
Public Shared sub Add(SomeObject as object)
SyncLock ctype(m_List, IList).SyncRoot
m_List.add(SomeObject)
end SyncLock
end sub
Public Shared sub Remove(SearchString as string)
SyncLock ctype(m_List, IList).SyncRoot
m_List.RemoveAll(function(o as SomeObject) o.SomeProperty = SearchString)
end SyncLock
end Function
Public Shared Function Get(SearchString as string) as SomeObject
'The Commented out code is what I am thinking of removing...
'SyncLock ctype(m_List, IList).SyncRoot
Dim FoundObjectList = m_List.where(function(o as SomeObject) o.SomeProperty = SearchString)
if FoundObjectList.count > 0 then
If FoundObjectList(0).CreateDate < Now.AddMinutes(5) then
Remove(FoundObjectList(0).SomeProperty)
Return nothing
end if
else
Return FoundObjectList(0)
End if
Return Nothing
'end SyncLock
end sub