У меня есть 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