2012-03-12 2 views
0

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

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

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

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

+0

Посмотрите на [Process Explorer] (http://technet.microsoft.com/en-us/sysinternals/bb896653), это инструмент, сделанный свободно Марк Руссинович – oleksii

ответ

2

, если вы работаете на win7/Vista или похожи, вы можете проверить/CPU/вкладку Связанных модулей ресурсов монитора (?):

enter image description here

0

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

Надежда, что помогает немного Саши

2

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

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

+0

Спасибо, вы знаете (простой) профилировщик, который показывает, какой объект выделяет, сколько памяти он использует? – Martijn

+0

[Профилировщик .NET CLR] (http://www.microsoft.com/download/en/details.aspx?id=16273) является бесплатным. Или ознакомьтесь с демо-версией коммерческих профилировщиков, например [dotTrace] (http://www.jetbrains.com/profiler/) –

0

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

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

+0

Thnx. Вы знаете профилировщика, чтобы узнать, куда идет моя память? – Martijn

+0

Я использую профилировщик, который в VS 2010 окончательный, его достаточно для меня, потому что я не делаю много профилирования. Просто сделайте кое-что, чтобы проверить, все ли правильно (иногда вы делаете некоторые ошибки в algos, что приводит к слишком большому использованию процессора, профилировщик выбирает их легко) – squelos

0

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

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

2
var modules = Process.GetCurrentProcess() 
       .Modules 
       .Cast<ProcessModule>() 
       .Select(m=>new {Name = m.ModuleName, Size = m.ModuleMemorySize }) 
       .ToArray();