Вы никогда не получите заставку для приложения .NET, чтобы показать мгновенно .
Даже если вы собрали сборки NGen, чтобы исключить время JIT-компиляции, вам все равно придется подождать, пока все библиотеки .NET Framework загрузятся в память. Это довольно большой фреймворк, и при холодном старте загрузка занимает нетривиальное время. С этим ничего не поделаешь.
Microsoft пыталась максимально облегчить боль. Класс WindowsFormsApplicationBase
(он определен в пространстве имен Microsoft.VisualBasic
, но не пугает вас; его можно использовать в приложении C #) предоставляет встроенный механизм для отображения заставки. , Все, что вам нужно сделать, это установить для свойства SplashScreen
соответствующую форму, а все остальное обрабатывается за кадром. Он был сильно оптимизирован для максимального времени отклика, даже в ситуации холодного запуска, но все равно он не будет мгновенный .
Единственный другой вариант, который у вас есть, - это написать небольшую оболочку в неуправляемом коде, единственная цель которой - как можно быстрее вывести всплывающее окно, а затем вызвать ваше приложение .NET, чтобы начать его запуск. Чем светлее, тем лучше здесь, конечно. C ++ - это вариант, но C, вероятно, лучше. Вам нужно минимизировать количество внешних библиотек, которые вы должны связать, поэтому такая инфраструктура, как MFC или Qt, определенно отсутствует: вам нужно напрямую ориентироваться на API Windows.
Команда Visual Studio сделала нечто похожее в VS 2010. У них есть довольно интересное объяснение процесса , доступное в их блоге :
Несмотря на то, что Visual Studio 2010 использует WPF для своего главного окна, использование WPF для заставки потребует от нас ожидания инициализации CLR и WPF, прежде чем мы сможем нарисовать один пиксель на экране. Несмотря на то, что мы сделали несколько значительных улучшений в скорости запуска CLR и WPF в .Net 4.0, она все еще не вполне соответствует производительности исходного Win32. Итак, выбор был сделан, чтобы остаться с собственным кодом C ++ и Win32 для заставки.
Но я бы не стал проводить здесь слишком много времени. Поскольку вы, как правило, должны давать пользователям возможность включать и выключать заставки, и большинство пользователей предпочитают отключать его, маловероятно, что очень многие люди когда-либо увидят его. Любой хороший профилировщик оптимизации скажет вам, что оптимизировать не стоит.