2008-11-12 3 views
16

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

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

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

ответ

10

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

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

+0

Как насчет веб-приложения. Если я использую один и тот же статический класс, определенный в DLL # 1, из двух ДРУГИХ отдельных сборок (DLL # 2 и DLL # 3), являющихся # 3 веб-сайтом и # 2 DLL, на которые ссылается веб-сайт, будут ли они иметь один и тот же статический класс значения? – 2014-07-10 23:01:45

13

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

+0

избили меня на 4 секунды – 2008-11-12 16:31:57

2

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

6

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

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

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

Да.

2

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

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