после нескольких часов отслеживания таинственных один или две секунды длительное «замораживание» Я наконец узнал, что его ReaderWriterLock (-1). Это серверное приложение, и блокировка здесь хранится для записи в коллекцию клиентов. Я не знаком с блокировкой, поэтому я хотел бы спросить, нет ли лучшего/более быстрого способа? Как насчет использования объекта блокировки для блокировки операторов добавления/чтения? Это замораживание происходит очень случайным образом, но очень раздражает, поскольку оно вызывает отставание от всех подключенных клиентов. Спасибо!Медленное замедление: ReaderWriterLock (-1). Могу ли я использовать разные блокировки?
ответ
Возможно, вы имели в виду AcquireReaderLock(-1)
/AcquireWriterLock(-1)
или аналогичные? Это предполагает, что блокировка будет решена - в этом случае исправьте любой код, удерживающий блокировку (запись) в это время. Если задержка составляет буквально с классом блокировки, то возможноReaderWriterLockSlim
будет иметь меньше накладных расходов. lock
действительно будет проще (и, следовательно, дешевле), но не дает такой же гранулярности - это, по сути, блокировка мьютекса, поэтому только один поток может играть с объектом. Контраст блокировки чтения/записи, которая позволяет одному считывателю NAND несколько считывателей.
Если честно, это звучит так же просто, как «иногда, какой-то код будет блокировать запись (блокирование других абонентов) и займет некоторое время». Поиск оскорбительный код - это черное искусство, но оно имеет мало общего с самой блокировкой.
- 1. Могу ли я использовать разные реализации обещаний?
- 2. Как правильно использовать readerwriterlock
- 3. Могу ли я использовать часть своих данных в качестве блокировки?
- 4. Могу ли я использовать FileStream для реализации блокировки файлов?
- 5. Могу ли я использовать Interlocked.Increment внутри оператора блокировки?
- 6. Могу ли я использовать блокировки для своей редко изменяющейся переменной?
- 7. Могу ли я использовать словарные элементы в качестве объектов блокировки?
- 8. Могу ли я избавиться от этой блокировки чтения?
- 9. Могу ли я использовать разные if-условия в Highstock-коде?
- 10. Могу ли я использовать разные таблицы стилей в ember?
- 11. Могу ли я использовать разные адаптеры для разных моделей?
- 12. Могу ли я использовать разные макеты для разных статей
- 13. Могу ли я использовать разные рабочие процессы одновременно в F #?
- 14. Могу ли я использовать разные версии рельсов в одной машине?
- 15. Оптимизированный доступ для чтения ReaderWriterLock
- 16. Как я могу имитировать медленное сетевое подключение
- 17. Замена ReaderWriterLock на ReaderWriterLockSLim - проблемы
- 18. Очень медленное замедление в UIScrollView в некоторых случаях
- 19. Могу ли я покрасить разные месяцы?
- 20. Могу ли я использовать переменные с assert/1?
- 21. Могу ли я использовать функцию yes() для возврата 1
- 22. Могу ли я всегда использовать 1-битные булевы?
- 23. Могу ли я использовать collectionViewCell 2 Cell в 1 UICollectionView?
- 24. Могу ли я использовать несколько файлов PCH в 1 проекте?
- 25. Массив структур, многопоточность, могу ли я одновременно писать разные индексы?
- 26. Могу ли я использовать Boost.Geometry.index.rtree с потоками?
- 27. html5 видео: быстрая перемотка вперед и медленное замедление?
- 28. Заказ в ReaderWriterLock
- 29. Могу ли я изменить тип блокировки экрана с помощью функции блокировки паролей для программной блокировки прокрутки?
- 30. Silverlight ReaderWriterLock Реализация Хорошо/Плохо?