我有一个类,它包含在多线程应用程序中使用的( T)列表。我有三个方法Get、Add和Remove这些访问和修改列表(的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发布于 2010-11-16 17:52:20
如果您尝试在列表中迭代并允许另一个线程在执行时添加一个条目,那么您将得到一个InvalidOperationException,它就是这样简单的。我猜这不是你想要的行为。
List<T>根本不支持从一个线程写入和从另一个线程同时读取-特别是不迭代列表。
https://stackoverflow.com/questions/4197238
复制相似问题