2014-02-11 4 views
4

Может быть очень наивным вопросом, но задавался вопросом, как это работает: Предположим, что у нас есть 10 проектов в Visual Studio, а 5 из них имеют ссылки на внешнюю DLL (скажем, Ext.dll) , используя относительный путь..Net Управление памятью приложений

Теперь, когда мое приложение развернуто на клиентском компьютере, будет ли Ext.dll загружаться 5 раз в памяти? Или он просто загружается один раз и будет использоваться другими проектами ссылок?

ответ

5

Сборка будет загружена только один раз в памяти.

CLR сначала проверяет, была ли сборка уже загружена в текущий момент AppDomain, если сборка не загружается под AppDomain, иначе символы будут разрешены из уже загруженной сборки.

Ofcourse, если вы не вручную создать другой AppDomain, который имеет свой собственный набор сборок.

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


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

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
+0

Спасибо Rohit, но как мы можем проверить/подтвердить, что это так? – Shankar

+0

Я обновил ответ. Пожалуйста, проверьте. –

+0

Отлично, спасибо! – Shankar

3

Clr нагрузки в памяти только один раз.

Примечание: для каждого экземпляра приложения Clr загрузить сборку снова.

Вы можете прочитать Clr via c#. В первой главе вы можете изучить многие из этих Понятий.

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