Посмотрел на объем занимаемой .Net приложением памяти и был несколько удивлен такой прожорливостью — 14MB (минимальное приложение). Стало интересно, а как загружаются сборки, которые используются приложением? Т.е если, например запустить 2 копии приложения, каждая из них получит свою копию FCL сборок (System.Windows.Forms.dll, System.dll ...) или в памяти всего одна копия и она шарится между всеми .Net приложениями? Т.е реально ли приложение занимает 14МБ оперативки?
Буду очень признателен за ссылки, объясняющие данный вопрос.
Здравствуйте, Azix, Вы писали:
A>Стало интересно, а как загружаются сборки, которые используются приложением? Т.е если, например запустить 2 копии приложения, каждая из них получит свою копию FCL сборок (System.Windows.Forms.dll, System.dll ...) или в памяти всего одна копия и она шарится между всеми .Net приложениями? Т.е реально ли приложение занимает 14МБ оперативки?
Эх, ссылку не дам, но можно выбрать стратегию использования сборок для хоста (их три, по-моему). Грубо говоря, несколько AppDomains, которые хостятся одним и тем же .NET хостом (в одном процессе) могут шарить между собой некоторые сборки; например, ASP.NET приложения в хосте IIS-а шарят между собой сборки со строгими именами (с нестрогими — нет).
Конечно, если приложения запускаются под разными хостами, ничего шариться не будет в любом случае.
Hello, "Azix" > Посмотрел на объем занимаемой .Net приложением памяти и был несколько > удивлен такой прожорливостью — 14MB (минимальное приложение). Стало > интересно, а как загружаются сборки, которые используются приложением? Т.е > если, например запустить 2 копии приложения, каждая из них получит свою > копию FCL сборок (System.Windows.Forms.dll, System.dll ...) или в памяти > всего одна копия и она шарится между всеми .Net приложениями? Т.е реально > ли приложение занимает 14МБ оперативки? > Буду очень признателен за ссылки, объясняющие данный вопрос.
Все FCL сборки уже обработаны NGEN, лежат они в папке %Windows%\assembly
соответственно загрузка такой сборки по большому счету лишь отображение уже
существующего файла на память конкретного процесса.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Все FCL сборки уже обработаны NGEN, лежат они в папке %Windows%\assembly TK>соответственно загрузка такой сборки по большому счету лишь отображение уже TK>существующего файла на память конкретного процесса.
Вот, например файл System.Windows.Forms.dll, он ведь не меняется и только один для .Net Framework данной версии. Неужели каждому прочессу, его использующему грузится отдельная копия в адресное пространство? Т.е я хочу четко понять — у каждого .Net приложения копия своя (в своем пространстве, т.е именно копия) или она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти?
Здравствуйте, Azix, Вы писали:
A>Вот, например файл System.Windows.Forms.dll, он ведь не меняется и только один для .Net Framework данной версии. Неужели каждому прочессу, его использующему грузится отдельная копия в адресное пространство?
Да.
A>Т.е я хочу четко понять — у каждого .Net приложения копия своя (в своем пространстве, т.е именно копия) или она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти?
У каждого своя, если мы говорим о разных процессах.
Здравствуйте, Oyster, Вы писали:
O>Здравствуйте, Azix, Вы писали:
A>>Вот, например файл System.Windows.Forms.dll, он ведь не меняется и только один для .Net Framework данной версии. Неужели каждому прочессу, его использующему грузится отдельная копия в адресное пространство?
O>Да.
A>>Т.е я хочу четко понять — у каждого .Net приложения копия своя (в своем пространстве, т.е именно копия) или она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти?
O>У каждого своя, если мы говорим о разных процессах.
Здравствуйте, Azix, Вы писали:
A>>>Т.е я хочу четко понять — у каждого .Net приложения копия своя (в своем пространстве, т.е именно копия) или она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти?
O>>У каждого своя, если мы говорим о разных процессах.
A>Жестоко. :)
не настолько. если возможно, то она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>не настолько. если возможно, то она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти
Т.е в физической памяти находится только одна копия сборки System.Windows.Forms.dll (к примеру), а для каждого процесса, она распологается в его адресном пространстве, но ссылается на эту самую расшаренную копию, так? Т.е System.Windows.Forms.dll занимает столько физической памяти, сколько занимает одна ее копия?
Я только не очень понял, что значит — "если возможно, то она "распологается"..."? А когда невозможно? И что тогда?
И есть ли какие-нибудь ссылки, а то у нас на работе базар по этому поводу — народ против .Net'а и приводят аргументы о расходе памяти.
Здравствуйте, Azix, Вы писали:
A>Здравствуйте, TK, Вы писали:
TK>>не настолько. если возможно, то она "распологается" в его адресном пространстве, но для всех приложений ссылается на одни и теже области физической памяти
A>Т.е в физической памяти находится только одна копия сборки System.Windows.Forms.dll (к примеру), а для каждого процесса, она распологается в его адресном пространстве, но ссылается на эту самую расшаренную копию, так? Т.е System.Windows.Forms.dll занимает столько физической памяти, сколько занимает одна ее копия? A>Я только не очень понял, что значит — "если возможно, то она "распологается"..."? А когда невозможно? И что тогда? A>И есть ли какие-нибудь ссылки, а то у нас на работе базар по этому поводу — народ против .Net'а и приводят аргументы о расходе памяти.
Хех, если единственный аргумент против .net'а — расход памяти, то это самый "слабый" аргумент
Hello, "Azix" > > Т.е в физической памяти находится только одна копия сборки > System.Windows.Forms.dll (к примеру), а для каждого процесса, она > распологается в его адресном пространстве, но ссылается на эту самую > расшаренную копию, так? Т.е System.Windows.Forms.dll занимает столько > физической памяти, сколько занимает одна ее копия?
Именно.
> Я только не очень понял, что значит — "если возможно, то она > "распологается"..."? А когда невозможно? И что тогда? > И есть ли какие-нибудь ссылки, а то у нас на работе базар по этому > поводу — народ против .Net'а и приводят аргументы о расходе памяти.
Я эту ссылку уже давал — там же вроде о разных AppDomains в пределах одного CLR хоста (одного процесса), а ты говорил о случае с несколькими процессами. Или я чего-то не понимаю?
Здравствуйте, Oyster, Вы писали:
TK>>здесь http://blogs.msdn.com/junfeng/archive/2004/08/05/208375.aspx описано TK>>когда код может эффективно шариться а когда нет.
O>Я эту ссылку уже давал — там же вроде о разных AppDomains в пределах одного CLR хоста (одного процесса), а ты говорил о случае с несколькими процессами. Или я чего-то не понимаю?
Там описывалось когда может использоваться NGEN образ а когда нет. Если NGEN образ сборки будет использоваться то, это будет одна dll для всех приложений.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Вот открыл я сейчас ProcessExplorer и посмотрел на вкладку Performance для Janus.exe (rsdn@home):
Private bytes : 42MB
Working set: 44MB
Virtual memory: 563MB
CPU Time: 1:26 (1:30 для VS2003.Net, которая работает с 10-ти утра )
Так сколько же физической памяти занимает к примеру эта програма (rsdn@home)?
Количество загруженных dll программой просто пугает. Посмотрев на столбец Image Base, я обнаружил что сборки распологаются в первых 2-х гигабайтах адресного пространства процесса. Разве это не означает, что они уникальны (т.е являются копиями) для данного процесса?
Hello, "Azix"
> Количество загруженных dll программой просто пугает. Посмотрев на > столбец Image Base, я обнаружил что сборки распологаются в первых 2-х > гигабайтах адресного пространства процесса. Разве это не означает, что они > уникальны (т.е являются копиями) для данного процесса?
Надо обращать внимание на то, сколько из этих dll были перемещены в процессе
загрузки. То, что *.dll загружаются в первые 2 гигабайта это нормально.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.