1

Я пытаюсь играть с профилированием памяти (в первый раз, поэтому, пожалуйста, простите мое невежество), просто чтобы узнать, сколько памяти потребляется классами, объектами , переменные, методы и т.д. Я написал этот образец C# консольная программа под названием MemPlay.exe:Как найти память, потребляемую классами, объектами, переменными и т. Д.

using System; 
using System.Text; 

namespace MemPlay 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     SomeClass myObject = new SomeClass(); 

     StringNineMethod(); 
     } 

     private static void StringNineMethod() 
     {   
     string someString0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     string someString1 = string.Empty; 
     string someString2 = string.Empty; 

     for (int i = 0; i < 9999; i++) { 
      someString1 += "9"; 
      someString2 += someString1; 
     } 
     } 
    } 

    class SomeClass 
    { 

    } 
} 

После того как программа бегала, я хочу узнать:

Сколько памяти потреблялось

  • MemPlay.exe
  • класс Программа
  • SomeClass
  • Основной метод
  • MyObject
  • StringNineMethod
  • someString0
  • someString1
  • someString2

и сколько процессор был использован:

  • MemPlay.exe
  • Основной метод
  • StringNineMethod

Я попытался с помощью инструмента VisualStudio в 'Performance Diagnostics', но все, что я вижу в том, какой объем памяти используется всей функции (т.е. Основной метод, StringNineMethod и String.Concat).

Есть ли способ/инструмент, который может помочь мне увидеть все детали о том, сколько памяти потребляет каждая переменная, объект, класс, метод? Заранее спасибо.

EDIT: Нет, мой вопрос не является дубликатом предложенного вопроса, так как этот вопрос пытается получить размеры объекта во время выполнения, я спрашиваю, как я могу получить эту информацию после окончания программы. Только то, что делает инструмент диагностики производительности Visual Studio, он дает эту информацию после завершения программы.

+0

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

+0

действительно? вы не имеете в виду получить эту информацию от VisualStudio Performance Diagnostics, или просто никак не от любого другого инструмента? –

+0

Я думаю, что это совсем не так – dotctor

ответ

2

Я использую это один: RedGate ANTS

Я также использовал этот в прошлом: SciTech Memory Profiler

Они оба имеют бесплатные пробные версии и стоит посмотреть на. Я был достаточно впечатлен в разное время, чтобы купить версии обоих.

(Я не работаю ни для одной компании, просто рекомендую, что сработало для меня - есть и другие инструменты, такие как JetBrains Memory Profiler, но я не пробовал это лично и не могу предложить свое мнение) ,

1

Вы можете использовать классы пространства имен System.Diagnostics, чтобы получить различные измерения и статистику.Для того, чтобы получить общий объем памяти, выделенной для свойства использования процесса WorkingSet (подробнее о MSDN):

Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); 
long processAllocatedMemory = currentProcess.WorkingSet64; 

Так что это процесс.

Чтобы получить конкретное выделение объекта, вероятно, можно использовать GC проверить первоначальную память, а затем выделить объект и, наконец, проверить память снова:

// Check initial memory 
var memoryStart = System.GC.GetTotalMemory(true); 

// Allocate an object. 
var myClass = new SomeClass; 

// Check memory after allocation 
var memoryEnd = System.GC.GetTotalMemory(true); 

Для проверки объема памяти на конкретном процессе после конкретной операции, которую вы, вероятно, можете используйте тот же трюк, что и для GC только в текущем процессе (как в первом примере).

Для проверки исполняемых файлов и программ используйте профайлер Visual Studio. В VS2013 Community Edition перейдите в меню ANALYZE -> Performance and Diagnostics (или нажмите Alt + F2). Это позволяет анализировать стандартный проект, ЕХ, веб-узлы ASP.NET и Windows Phone App:

enter image description here

Там, Вы выбираете мастер Performance, нажмите кнопку Пуска, и на следующем этапе у вас есть выбор метрик, которые вы хотели бы запустить. Одним из которых является потребление памяти:

enter image description here

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