2012-07-06 3 views
3

Даже самое базовое приложение с простым окном занимает несколько секунд, чтобы запустить его эквивалентные нагрузки Win32 в течение секунды.Почему приложения .Net работают медленнее?

Я читал, что задержка связана не с тем временем, которое требуется JIT, чтобы превратить код операции в машинный код, а время, затрачиваемое Windows на загрузку .Net framework.

Таким образом, используя tasklist.exe CLI приложение MS», я проверил, если mscoree.dll был уже загружен:

C:\>tasklist /m mscoree.dll 

Image Name     PID Modules 
========================= ====== ===================== 
explorer.exe     368 mscoree.dll 
BSQLServer.exe    652 mscoree.dll 
TOTALCMD.EXE     408 mscoree.dll 
Uedit32.exe     260 mscoree.dll 
OUTLOOK.EXE     1912 mscoree.dll 

Далее, я пробежал базовое приложение только с кнопкой ОК, но все равно потребовалось несколько секунд, чтобы будет отображаться.

Предполагая, что mscoree.dll действительно является доказательством того, что .Net загружен, по крайней мере, для обработки основных Windows, то почему задержка? FWIW, он находится на хосте XPSP3.

Даже если вся инфраструктура .Net загружается для каждого процесса, так как она уже запущена и запущена для других процессов, я предполагаю, что она просто скопирует код из этих других процессов в ОЗУ?

спасибо.


Edit: Похоже, что медленнее, начальный момент запуска было связано с помощью приложения антивирусную/брандмауэра, а не к JIT или погрузочной .Net. Другая возможная проблема: если ваше приложение немного медленно запускается из холодного состояния, убедитесь, что он загружает только минимальный минимум во время запуска.

+1

Как вы используете приложение и какое приложение оно? Вы пробовали простое консольное приложение, запускаемое из командной строки (как минимальный тест)? –

+1

Вы можете попробовать использовать [Process Monitor] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx), чтобы увидеть, что на самом деле происходит до тех пор, пока вы не увидите пользовательский интерфейс приложения. Это будет включать такие события, как загрузка DLL, доступ к файлам и/или сети. –

+0

Трудно ответить из-за явно противоречивой/неправильной информации в вопросе. Кто сказал вам, что начальная задержка не связана с JIT? –

ответ

2

У меня есть простое тестовое приложение C# для Windows 7, которое запускается мгновенно, без задержки. Это когда я дважды щелкнув исполняемый файл в проводнике. Из VisualStudio требуется несколько секунд, потому что VS затем проверяет, нужно ли компилировать вещи, возможно, некоторые инструменты для отладки и т. Д. И т. Д.

+0

То же самое, хотя у меня есть довольно мясистая машина (SSD, четырехъядерный i7). –

+0

OT: Только что установил мой 240Gb SSD 6G в этом месяце, и я больше всего говорю, что Visual Studio любит его: o) – balexandre

+0

FWIW, я запускал встроенную двоичную версию Release, а не из VB Express 'IDE. – Gulbahar

1

Avast Antivirus также использует технику под названием «Глубокий экран», которая проверяет файлы, подлежащие эксплоатации, до того, как они разрешены к запуску , Я добавил исключение для пути к моему приложению VB.NET на экране настроек Avast Exlusions и теперь он запускается мгновенно без какой-либо ненормальной задержки.

+0

Аваст был явным преступником в моем случае. У меня было мертвое простое приложение .NET Windows Forms, которое продолжалось от 25 до 30 секунд, чтобы каждый раз открывать Avast, а затем загружалось мгновенно после того, как я установил Avast на «Disabled in 10 minutes». –

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