вы можете попробовать, как показано ниже, используя объединение и подзапрос
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
Для загрузки только для записи Монитор является более дешевым, чем ReaderWriterLockSlim, однако при моделировании чтения + загрузка записи, где считанный намного больше, чем запись, затем ReaderWriterLockSlim должен выполнить Монитор.
Как Вы знаете то, что вызвало плохую производительность? Вы не можете пойти, предположив это, единственный путь состоит в том, чтобы сделать некоторое профилирование.
Как Вы обрабатываете блокировку для родительского набора, или действительно ли это постоянно?
Возможно, необходимо ли добавить некоторый вывод отладки и видеть ли то, что действительно происходит?
Я не гуру, но мое предположение - то, что RWLS более приспособлен к тяжелой конкуренции (например, сотни потоков) тогда как Monitor
более настраивается к тем одноразовым проблемам синхронизации.
Лично я использую a TimerLock
класс, который использует Monitor.TryEnter
с параметром тайм-аута.