Какова область применения статического класса? - PullRequest
16 голосов
/ 12 ноября 2008

У меня есть сборка, которая может использоваться более чем одним процессом одновременно. Если я использую статический класс, все ли процессы будут использовать один и тот же «экземпляр» этого класса?

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

Пудинг в деталях здесь заключается в том, что сборка используется пользовательским адаптером BizTalk, который может быть настроен для обработки сообщений в параллельных пакетах. Это то, что я называю «несколько процессов» выше.

Ответы [ 5 ]

13 голосов
/ 12 ноября 2008

Статические классы существуют один раз для каждого домена приложения. В вашем случае это будет зависеть от того, использует ли адаптер несколько потоков в одном и том же домене приложения (таким образом совместно используют один экземпляр статического класса) или использует несколько процессов (таким образом, имеющих отдельные экземпляры статического класса).

10 голосов
/ 12 ноября 2008

Несколько потоков будут совместно использовать экземпляр. По этой причине статический класс может быть удобен для передачи состояния между потоками, но вы должны быть очень осторожны, чтобы не вводить условия гонки (Monitor или lock ваши свойства).

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

6 голосов
/ 12 ноября 2008

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

Нет, все они имеют отдельные экземпляры.

"Поскольку процессы разделены, будут ли они работать в разных доменах приложений, поэтому статические" экземпляры "будут разделены?"

Да.

2 голосов
/ 12 ноября 2008

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

Я предполагаю, что вы хотите отдельный dll / проект, обслуживающий все клиентские запросы. Вы можете использовать статический класс / singleton / multiton для реализации желаемой функциональности. Это действительно зависит от того, чего вы пытаетесь достичь.

2 голосов
/ 12 ноября 2008

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

...