Мое чувствительное к производительности приложение использует MemoryMappedFiles для передачи больших объемов данных между многими доменами приложений. Мне нужен самый быстрый механизм, чтобы сигнализировать принимающему AD о том, что есть новые данные для чтения.
Дизайн выглядит следующим образом:
AD 1: Модуль записи в MMF, когда данные записываются, он должен уведомлять AD считывателя
] 2, 3, н. Э ..: Читатель MMF
Читателям не нужно знать, сколько данных записано, потому что каждое записанное сообщение будет начинаться с ненулевого int и будет читаться до нуля, не беспокойтесь о частично записанных сообщениях.
(I think) Традиционно в рамках одного AD для этого можно использовать Monitor.Wait / Pulse, я не думаю, что он работает во всех доменах приложений.
Можно также использовать метод или событие удаленного взаимодействия MarshalByRefObject, но я бы хотел что-то более быстрое. (Я тестирую 1 000 000 вызовов MarshalByRefObject в секунду на моем компьютере, неплохо, но я хочу больше)
Именованный EventWaitHandle примерно в два раза быстрее, чем при первоначальных измерениях.
Есть ли что-нибудь быстрее?
Примечание: получающие объявления нет необходимости получать каждый сигнал, пока последний сигнал не отброшен.