Какова область действия статического класса?

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

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

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


person Keith Sirmons    schedule 12.11.2008    source источник


Ответы (5)


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

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

person Joel Coehoorn    schedule 12.11.2008
comment
Что уж говорить о веб-приложении. Если я использую один и тот же статический класс, определенный в DLL № 1 из двух ДРУГИХ отдельных сборок (DLL № 2 и DLL № 3), будучи № 3 приложением веб-сайта и № 2 DLL, на которую ссылается веб-сайт, будут ли они использовать один и тот же статический класс ценности? - person Lord of Scripts; 11.07.2014
comment
@LordofScripts Да, потому что все они находятся в одном AppDomain. - person Joel Coehoorn; 11.07.2014

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

person tvanfosson    schedule 12.11.2008

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

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

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

да.

person Ana Betts    schedule 12.11.2008

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

person Maxam    schedule 12.11.2008

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

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

person mson    schedule 12.11.2008