Управление памятью приложений .Net

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

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


person Shankar Raju    schedule 11.02.2014    source источник


Ответы (2)


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

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

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

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


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

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
person Rohit Vats    schedule 11.02.2014
comment
Спасибо, Рохит, но как нам проверить/подтвердить, что это так? - person Shankar Raju; 11.02.2014

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

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

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

person Community    schedule 11.02.2014