Как я могу увидеть, какие DLL загружаются моим приложением? - PullRequest
0 голосов
/ 12 марта 2012

Я хотел бы знать, как я могу видеть, какие DLL загружаются моим приложением.Я хочу знать это, потому что приложение потребляет много памяти, около 400-500 МБ (частные байты).

Я профилировал свое приложение с помощью memprofiler для .NET, но не смог найти утечек памяти, поэтому подумал, что, возможно, загружены некоторые DLL, которые очень велики.Если это так, я могу оправдать использование памяти моим приложением.

Я надеюсь, что вы можете мне помочь.

Редактировать: Для моей информации: Скажите, что foo.dll на жестком диске2MB.Когда этот dll используется и загружается в моем приложении, этот файл также занимает 2 МБ памяти?

Ответы [ 6 ]

2 голосов
/ 12 марта 2012
var modules = Process.GetCurrentProcess()
                .Modules
                .Cast<ProcessModule>()
                .Select(m=>new {Name = m.ModuleName, Size = m.ModuleMemorySize })
                .ToArray();
2 голосов
/ 12 марта 2012

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

То, что 400-500 МБ слишком много для вашего приложения, конечно, зависит от того, что вы делаете. Большая часть этого будет вызвана не загрузкой DLL, а выделением памяти во время выполнения. Попробуйте использовать профилировщик, который показывает, какой тип объекта выделяет, сколько памяти в вашем приложении. Это часто уже говорит вам, где искать.

2 голосов
/ 12 марта 2012

если вы работаете на win7 / vista (?) Или аналогичном, вы можете проверить вкладку Монитор ресурсов / Процессор / Связанные модули:

enter image description here

0 голосов
/ 12 марта 2012

В Visual Studio проверьте Window-> Module view при отладке вашего приложения. Вы увидите все загруженные модули.

Маловероятно, что у вас достаточно DLL, чтобы использовать столько адресного пространства. Отсутствие утечек памяти не означает, что у вас нет объектов, которые вам не нужны. Если вам нужно выяснить, что занимает память - внимательно посмотрите, какие объекты выделены, также оцените, сколько памяти ваша программа должна занять (т. Е. Загрузка 100 МБ XML-файла и ожидание использования 100 МБ памяти нереально).

0 голосов
/ 12 марта 2012

Нет, это не потому, что ваш DLL-файл занимает 2 МБ на жестком диске, он будет занимать только 2 МБ памяти.DLL это просто программа.Так что это как иметь EXE-файл размером 2 МБ.Он может легко израсходовать 2 ГБ, если он выполняет массивные вычисления и выделяет много памяти:)

Редактировать: Как сказано ниже, память, используемая при загрузке DLL, незначительна по сравнению с памятью, выделенной во время выполнения.Как уже говорилось, используйте профилировщик, чтобы увидеть, куда уходит вся эта память!

0 голосов
/ 12 марта 2012

tasklist /m в командной строке показывает, по крайней мере, загруженные библиотеки каждого запущенного приложения.не хватает информации о памяти каждого dll.

Надеюсь, это поможет немного Саша

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...