Потому что .NET, как и платформа Java, является средой JIT. Весь высокоуровневый .NET-код компилируется в байт-код промежуточного языка Microsoft.
Чтобы запустить вашу программу, этот байт-код необходимо скомпилировать / перевести на собственный машинный код. Однако скомпилированные запрограммированные файлы .NET хранятся не в собственном машинном коде, а в байт-коде промежуточной виртуальной машины.
Первый запуск - это JIT-компилирование, поэтому потребовалось дополнительное время.
Последующие запуски больше не нуждаются в JIT-компиляции, но собственный код извлекается из JIT-кеша, поэтому он должен быть быстрее.
Поддерживали ли вы свое приложение, не прерывая его при последующих запусках? Тогда вторая причина также связана с ВМ. (ВМ: 1 = виртуальная машина; ВМ: 2 = виртуальная память). Все современные обобщенные операционные системы запускают свои процессы в виртуальной памяти, которая представляет собой карту реальной памяти, что позволяет операционной системе управлять и оптимизировать использование системных ресурсов. Менее используемые процессы часто удаляются в дисковый кэш, чтобы другие процессы могли оптимально использовать ресурсы.
Ваш процесс не был в виртуальной памяти в первый раз, поэтому он должен нести потери в памяти. Поскольку впоследствии ваш процесс был одним из самых последних использовавшихся в топ-листе (то есть в нижней части наименее недавно использованного списка), он еще не был удален в кэш диска.
Кроме того, ОС распределяет ресурсы по мере необходимости. Таким образом, в первом раунде вашему процессу пришлось пройти через все усилия, направленные на то, чтобы раздвинуть конверт с ОС, чтобы расширить границы своих ресурсов.
Виртуальная машина позволяет .NET и Java преобразовывать большинство функций программирования в уровень, независимый от машины, разделяя и, следовательно, оставляя меньшую путаницу, с которой приходится сталкиваться машинно-зависимым программистам. Даже несмотря на то, что Microsoft Windows работает на довольно унифицированном оборудовании-потомке x86, в разных версиях ОС и моделях процессоров есть достаточные различия, чтобы гарантировать выделенную виртуальную машину, чтобы предоставить программистам и пользователям .NET согласованное представление.