.NET-программы имеют два разных способа запуска.Их называют холодным стартом и горячим стартом.Холодный запуск - медленный, вы получите его, когда ни одна из программ .NET не запускалась раньше.Или когда программа, которую вы запускаете, велика и никогда не запускалась раньше.Операционная система должна найти файлы сборки на диске, они не будут доступны в кеше файловой системы (RAM).Это занимает некоторое время, жесткие диски работают медленно, и есть много файлов для поиска.Небольшое бесполезное приложение Winforms должно загрузить 51 DLL для начала работы.Ничего не стоящее приложение WPF весит 77 DLL.
Вы получаете теплый старт, когда файлы сборок были загружены раньше, не так давно.Данные файла сборки теперь поступают из оперативной памяти, а не с медленного диска, это zipedy-doodah.Единственные накладные расходы при запуске - это дрожание.
Мало что можно сделать с холодным запуском, сборки должны приходить с диска так или иначе.Быстрый диск имеет большое значение, SSD особенно эффективны.Использование ngen.exe для предварительной сборки сборки на самом деле усугубляет проблему, создает другой файл, который необходимо найти и загрузить.По этой причине Microsoft рекомендует , а не , предваряя небольшие сборки.Видение этой проблемы с программами .NET 4 также очень важно, у вас не так много программ, которые связаны с CLR версии 4 и сборками фреймворка.Во всяком случае, пока, это не решается со временем.
Есть еще один способ, которым эта проблема автоматически исчезает.Функция Windows SuperFetch начнет замечать, что вы часто загружаете CLR и сопряженные сборки Framework, и начинает автоматически загружать их в RAM.Тот же трюк, который используют «оптимизаторы» Microsoft Office и Adobe Reader.Это также программы, которые имеют много зависимостей DLL.Неуправляемые, проблема не характерна для .NET.Эти оптимизаторы являются грубыми, они предварительно загружают библиотеки DLL при входе в систему.Это подход «я действительно важен, вверните все остальное» для решения проблемы, убедитесь, что вы отключили их, чтобы они не вытесняли пространство ОЗУ, которое мог бы использовать SuperFetch.