2011-01-14 4 views
1

Как измерить размер программы на C#?Как измерить размер программы C#

Пусть у меня есть

class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello World"); 
      Console.ReadKey(true); 
     } 
} 

Как измерить, сколько байт программа взял?

Благодаря

+7

Это помогло бы, если бы вы могли определить, что означает «сколько байтов, взятых программой» означает в первую очередь. Прежде чем вы сможете измерить количество, вы должны определить его. –

+0

Нужно ли учитывать размер .NET Framework, на который опирается ваша программа? –

+0

будет лучше – generaluser

ответ

4

Это даст вам размер исполняемого файла программы в байтах внутри вашей программы:

FileInfo fi = new FileInfo(Assembly.GetEntryAssembly().Location); 
Console.WriteLine(fi.Length); 

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

4

Собирать и проверить размер скомпилированного файла?

0

Возможно, что-то подобное работает?

FileInfo fInfo = new FileInfo(Application.ExecutablePath); 
long size = fInfo.Length; 
MessageBox.Show(size.ToString()); 
+2

Это будет работать только в окнах. 'Assembly.GetEntryAssembly(). Location' работает в обеих формах Windows и WPF. – Yogesh

1

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

Когда программа будет выполнена, компьютер выделит память для загрузки программы. Для этого процесса загрузки могут потребоваться другие DLL-библиотеки .NET или сторонние DLL-файлы по мере необходимости. Обычно процесс загрузки обычно потребляет достаточно постоянный объем памяти при первой загрузке программы. Сколько памяти зависит от размера и структуры программы или сторонних DLL. .Net хорошо загружает вещи JIT (Just in Time), а это значит, что некоторые DLL-файлы могут не загружаться до тех пор, пока они не понадобятся.

В ходе запуска программы .Net будет выделять предметы для выполнения стека. Поскольку метод и функции вызывают друг друга, они помещаются в стек, а когда вызов метода и функции завершен, пакет распадается. Например, рекурсивная функция может помещаться в стек 100 секунд и в конечном итоге исчерпать память, если рекурсия слишком глубокая. Этот «стек» представляет собой динамическое распределение памяти и зависит от метода и функций, вызываемых вашим приложением. Чем глубже вызовы, тем больше предметов находится в стеке. Это повлияет на размер памяти, используемой программой.

Другой кусок головоломки - куча. Динамические распределения помещаются в кучу. Обычно это структуры данных, которые ваша программа использует в настоящее время. Потому что .Net имеет сбор мусора, программисту .Net не нужно беспокоиться об этом управлении памятью. По мере того, как предметы помещаются в кучу и используются, размер вашей программы (использование памяти мудрый) растет, а затем сбор мусора проверяет каждый так часто, чтобы очистить вещи. Например, у вас может быть программа, которая читает в XML-файле 1 Gig в память. Размер вашей программы может быть только 30K, но поскольку весь файл был прочитан в память, размер вашей программы теперь превышает 1 Gig (память разумная). Можно использовать инструменты для мониторинга использования памяти программы, чтобы убедиться, что она действует надлежащим образом. Большинство вещей в .Net - это сбор мусора, поэтому не нужно беспокоиться о «размере» выделения памяти (если вы не читаете действительно большие файлы в память!), Но неуправляемые ресурсы по-прежнему необходимо учитывать и очищать как необходимо. Примеры неуправляемых ресурсов - это подключение к базе данных, дескриптор файла и т. Д. У CNet есть хороший оператор USING, который автоматически вызывает Dispose для обработки неуправляемых ресурсов (при условии, что IDisposable реализован), если вы будете осторожны в этом, ваша программа должна быть свободна от любых управляемых или неуправляемых утечек.

Все эти вещи способствуют размеру программы во время компиляции и во время выполнения.Чем больше и сложнее программа, тем больше размер на диске и больше использования памяти во время выполнения.

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