我有一個ConcurrentBag
暴露給Parallel.ForEach
內的讀/寫操作。基本上,我需要根據幾個屬性檢查包中是否存在對象,如果沒有匹配,則將其添加到包中。這真的很慢。沒有鎖的情況下使用List<>
只是一小部分時間。這段代碼有什麼問題?我最好使用列表鎖定ReaderWriterLockSlim
?我在這裏處理大約1,000,000個物體。Parallel ForEach和ConcurrentBag
var bag = new ConcurrentBag<Beneficiary>();
Parallel.ForEach(cx, _options, line =>
{
if (!bag.Any(o =>
o.WinID == beneficiary.WinID &&
o.ProductType == beneficiary.ProductType &&
o.FirstName == beneficiary.FirstName &&
o.LastName == beneficiary.LastName &&
o.MiddleName == beneficiary.MiddleName))
{
bag.Add(beneficiary);
}
}
如果代碼實際上沒有正常工作,則代碼的性能無關緊要。你真的很想要一個不正確的結果嗎?或者一個正確的結果會更慢?不是說沒有辦法改善這個,只是「螺紋安全」不是它的方法 – Servy 2014-09-03 18:02:06