Если вы обнаружите, что использование блокировки в этом случае слишком медленное, у вас гораздо большая проблема.Блокировка, если она не оспаривается, занимает в моей системе около 75 наносекунд (2,0 ГГц Core 2 Quad).Конечно, когда это утверждается, это займет немного больше времени.Но поскольку блокировка просто защищает вызов к Enqueue
или Dequeue
, маловероятно, что общее время записи журнала будет намного больше, чем 75 наносекунд.
Если блокировка проблема - то есть, если вы обнаружите, что ваши потоки выстраиваются в очередь за этой блокировкой и вызывают заметное замедление в вашем приложении - тогда маловероятно, что создание очереди без блокировок может сильно помочь.Зачем?Потому что, если вы действительно так много записываете в журнал, ваша очередь блокировки без блокировки будет заполняться так быстро, что вы будете ограничены скоростью подсистемы ввода / вывода.
У меня естьмногопоточное приложение, которое записывает порядка 200 записей в секунду в Queue<string>
, защищенное простой блокировкой.Я никогда не замечал сколько-нибудь значительных конфликтов блокировок, и обработка ничуть не замедлилась.Эти 75 нс затмеваются временем, необходимым для всего остального.