Два экземпляра приложения и DLL это загружает
У меня есть исполняемый файл (VC++), который запускается дважды с различными параметрами командной строки, поэтому в основном есть два запущенных экземпляра. Этот исполняемый файл загружает C# dll. Первое, что я хочу знать, это то, будут ли два экземпляра dll загружены в два разных экземпляра. Если да, то у меня есть статический класс в dll, как это будет реализовано, то есть будет два экземпляра статического класса или он будет разделен между двумя процессами.
Когда я пытаюсь запустить два экземпляра исполняемого файла, только один экземпляр успешно загружает DLL.
1 ответ
Процесс загружен в свой собственный домен приложений, и между ними ничего не передается, даже библиотеки DLL загружены в соответствующий домен приложений. Таким образом, в каждом процессе будет два отдельных экземпляра вашего статического класса. Во-вторых, DLL загружается в хост-процесс. Если у вас есть Private DLL, то они загружаются отдельно в процессе без совместного использования.
Пространство процесса будет отличаться, поэтому, например, глобальные переменные в DLL будут специфичны для каждого отдельного процесса. Вполне возможно, что код в памяти будет общим (Windows обычно использует подсчет ссылок, чтобы сделать эту часть более эффективной).