Обнаружено замедление: ReaderWriterLock (-1). Могу ли я использовать разные замки? - PullRequest
1 голос
/ 29 октября 2009

после нескольких часов отслеживания таинственной длительности "заморозки" длительностью в одну или две секунды, я, наконец, обнаружил, что это ReaderWriterLock (-1). Это серверное приложение, и блокировка здесь сохраняется для записи в коллекцию клиентов. Я не знаком с блокировкой, поэтому я хотел бы спросить, нет ли лучшего / более быстрого способа? Как насчет использования объекта блокировки для блокировки добавления / чтения операторов коллекции? Это замораживание происходит очень случайно, но очень раздражает, поскольку вызывает задержку для всех подключенных клиентов. Спасибо!

1 Ответ

2 голосов
/ 29 октября 2009

Вы имеете в виду AcquireReaderLock(-1) / AcquireWriterLock(-1) или подобное? Это предполагает, что блокировка установлена ​​- в этом случае исправьте тот код, который удерживает блокировку (запись) в данный момент. Если задержка буквально с классом блокировки, то возможно ReaderWriterLockSlim будет иметь меньше служебных данных. lock действительно будет проще (следовательно, дешевле), но не допускает такой же степени детализации - это по сути блокировка мьютекса, поэтому только один поток может играть с объектом. Сравните блокировку читателя / писателя, которая позволяет одному писателю NAND несколько читателей.

Если честно, это звучит так же просто, как "иногда какой-то код блокирует запись (блокируя других вызывающих) и занимает некоторое время для завершения". Нахождение код-нарушитель - это черное искусство, но оно не имеет ничего общего с самим замком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...