Самый легкий способ предупредить о событии несколько процессов в.NET

Многие дешевые хостинговые компании используют SQL Express. И я знаю от личного опыта, что SQL Express является эффективным решением для большинства вещей.

"Большинство вещей" включает крупный проект в продуктивную среду.

6
задан feihtthief 30 September 2009 в 17:58
поделиться

4 ответа

Вы можете использовать дескрипторы ожидания между процессами. Для получения дополнительной информации ознакомьтесь с этим превосходным учебником по многопоточности .

Вы можете использовать дескрипторы ожидания в одноэлементном классе, чтобы создать своего рода одноэлементный синглтон для всего хоста. Вот все, что вам нужно знать о шаблоне синглтона в C # .

Одна возможная реализация: синглтон может представлять параметры конфигурации. Перед получением параметра вы можете проверить отметку времени в файле, в котором хранятся кэшированные параметры конфигурации. Доступ для чтения / записи к файлу может быть защищен дескрипторами ожидания.

Если вы не хотите использовать дескрипторы ожидания, вы можете установить отметку времени в реестре. Получение и установка значений реестра являются атомарными операциями, поэтому они автоматически потокобезопасны. Однако имейте в виду, что для этого требуются разрешения реестра,

5
ответ дан 8 December 2019 в 17:23
поделиться

Именованный семафор и Именованные мьютексы используются для межпроцессной синхронизации.

Msdn говорит:

Семафоры бывают двух типов: локальные семафоры и именованные системные семафоры. Если вы создаете объект семафор с помощью конструктора, который принимает имя, он связывается с семафором операционной системы с таким именем. Именованные системные семафоры видны во всей операционной системе и могут использоваться для синхронизации действий процессов.

Msdn говорит:

Именованные системные мьютексы видны во всей операционной системе и могут использоваться для синхронизации деятельность процессов. Вы можете создать объект Mutex, представляющий именованный системный мьютекс, с помощью конструктора, который принимает имя. Объект операционной системы может быть создан одновременно или существовать до создания объекта Mutex.

Надеюсь, это поможет

4
ответ дан 8 December 2019 в 17:23
поделиться

Вы можете использовать именованный EventWaitHandle. Однако вам также понадобится способ сбросить событие после того, как были уведомлены все прослушивающие процессы. Вероятно, вы можете сделать что-то вроде установки события, а затем сбросить его через короткий промежуток времени: одну или пять секунд. Клиенты могут знать, что событие не сработает так быстро по очереди.

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

Есть способы делать то, что вы просите, без необходимости создавать что-то особенное.

3
ответ дан 8 December 2019 в 17:23
поделиться

For tightly coupled publisher/subscriber model (where the publisher is explicitly aware of all subscribers):

  • You can use a semaphore set by the publisher and have all subscribers wait on it. However, if any of the subscribers dies, your count will be thrown off. You will need to implement some form of a zombie detection

  • You could use COM connection points. This requires admin registration of the COM classes and type libraries.

For loosely coupled publisher/subscriber model (where the publisher doesn't know anythig about the subscribers):

  • If you configuration settigns are kept in a file or in the registry, the subscribers can implement a file or a registry change listener. Unfortunately, this solution is limited to file/registry changes, does not scale and can be subject to delays based on the file system/registry load.

  • You can use the COM+ Loosely Coupled Events (through System.EnterpriseServices). However, this could be an overkill for you due to the complexity of LCE.

  • You can broadcast a window message that the publisher registered through RegisterWindowMessage to all hidden top-level windows of particular class. All subscribers will need to create one such window. This would require some Win32 interop, but is probably the most lightweight way to implement loosely coupled publisher/subscriber.

2
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

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