У меня есть 2 многопоточных метода, работающих в 2 разных местах, но в то же время разделяющих доступ к объекту массива списка (назовем его PriceArray ), первый поток Добавляет и При необходимости удаляет элементов из PriceArray (содержимое массива обновляется сторонним поставщиком данных), а средняя частота обновления составляет от 0,5 до 1 секунды.
Второй поток только читает -на данный момент - содержимое массива каждые 3 секунды с использованием цикла foreach (принимает большинство элементов, но не все).
Чтобы избежать неприятного исключения Collection was modified; enumeration operation may not execute
, когда второй поток проходит через массив Iзаключили операцию добавления и удаления в первый поток с lock(PriceArray)
, чтобы обеспечить исключительный доступ и предотвратить возникновение этого исключения.Проблема в том, что я заметил проблему с производительностью, когда второй метод пытается циклически перебрать элементы массива, так как большую часть времени массив блокируется потоком добавления / удаления.
Если сценарий выполняется таким образом, выполнитеу вас есть какие-либо предложения, как улучшить производительность, используя другие методы обеспечения безопасности потоков / эксклюзивного доступа в C # 4.0?
Спасибо.