ReaderWriterLockSlim по сравнению с монитором

вы можете попробовать, как показано ниже, используя объединение и подзапрос

select t1.USER_ID from 
(
select USER_ID,max(EVENT_DATE) as EVENT_DATE from 
USER_EVENTS where EVENT_TYPE='USER_ACTIVATED'
group by USER_ID
) t1 
join
select * from 
(
select USER_ID,max(EVENT_DATE) as EVENT_DATE from 
USER_EVENTS where EVENT_TYPE='USER_DELETED'
 group by USER_ID
) t2 on t1.=t2.USER_ID and t2.EVENT_DATE>t1.EVENT_DATE
5
задан Rauhotz 2 January 2009 в 16:04
поделиться

3 ответа

Для загрузки только для записи Монитор является более дешевым, чем ReaderWriterLockSlim, однако при моделировании чтения + загрузка записи, где считанный намного больше, чем запись, затем ReaderWriterLockSlim должен выполнить Монитор.

13
ответ дан 18 December 2019 в 14:52
поделиться

Как Вы знаете то, что вызвало плохую производительность? Вы не можете пойти, предположив это, единственный путь состоит в том, чтобы сделать некоторое профилирование.

Как Вы обрабатываете блокировку для родительского набора, или действительно ли это постоянно?

Возможно, необходимо ли добавить некоторый вывод отладки и видеть ли то, что действительно происходит?

0
ответ дан 18 December 2019 в 14:52
поделиться

Я не гуру, но мое предположение - то, что RWLS более приспособлен к тяжелой конкуренции (например, сотни потоков) тогда как Monitor более настраивается к тем одноразовым проблемам синхронизации.

Лично я использую a TimerLock класс, который использует Monitor.TryEnter с параметром тайм-аута.

0
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: