2010-03-25 2 views
4

Приложение .NET 3.5 C# создает несколько доменов приложений. Каждый appdomain загружает ту же неуправляемую dll сторонней стороны. Эта DLL считывает файл конфигурации при инициализации. Если конфигурация изменяется во время выполнения, dll необходимо снова выгрузить и загрузить. Эта DLL не в нашей области, чтобы переписать правильно.Несколько приложений, вызывающих ту же неуправляемую dll

Имеет ли каждый доступ к однопользовательской копии отдельную копию этой неуправляемой DLL, или же Windows хранит одну копию dll и поддерживает подсчет использования? Если последнее имеет место, как мы получаем каждый экземпляр неуправляемой dll, чтобы отразить его уникальную конфигурацию?

+0

Когда вы говорите «Загрузка», вы имеете в виду через 'LoadLibrary'? – leppie

+0

Предложите, чтобы вы рассказали больше о тех обстоятельствах, в которых изменяется файл конфигурации: что его изменяет: подразумеваете ли вы, что произвольными интервалами вы создаете новый appdomain, а затем читаете файл конфигурации, который может быть изменен приложением, прогресс ? Итак, в любой момент, когда файл конфигурации изменяется, все DLL, загруженные предыдущим конфигурационным файлом, должны быть выгружены и перезагружены? Итак, данная «dll» не имеет возможности повторно настраивать себя при уведомлении об изменении конфигурационного файла? Звучит как кошмар. – BillW

+0

Leppie - by «Load» Я имею в виду LoadLibrary. BillW - Я согласен, это кошмар дизайна, который выходит за рамки нашего контроля. Нам нужно работать с этим пока. Конфигурационный файл изменяется всякий раз, когда пользователю нужно переключаться между «проектами» (не важно, что это в этом контексте), и это может произойти в любое время. –

ответ

2

Takea посмотреть на этом блоге

Explanation of Processes and AppDomains

+0

Продвинутый пользователь, не отвечающий на вопрос. Даже ссылка, на которую ссылается, не отвечает на вопрос. – Neutrino

0

Я думаю, что неуправляемые библиотеки DLL загружаются только один раз в процессе операционной системой, так что каждое приложение-домен будет иметь тот же самый загруженный экземпляр. Чтобы разгрузить dll, используйте функцию FreeLibrary. Однако, поскольку несколько доменов приложений, вероятно, загрузили dll, нет гарантии, что FreeLibrary из одного домена приложения фактически освободит/выгрузит dll.

Как говорит BillW, это похоже на кошмар для меня тоже!

Смежные вопросы