Почему время запуска моего приложения медленнее, когда я использую Process.Start ()? - PullRequest
6 голосов
/ 27 августа 2010

Я пытаюсь профилировать время запуска моего приложения, поэтому я написал небольшую программу на C #, которая запустит мое приложение с помощью метода Process.Start () и рассчитает время с помощью секундомера.

Когда я пытаюсь запустить приложение самостоятельно (просто нажав на него), это, вероятно, занимает 2-3 секунды. Когда я пытаюсь запустить приложение, используя мою тестовую программу, это занимает 8-10 секунд. Время запуска последовательно отличается в этой величине.

Есть идеи, почему использование Process.Start для запуска исполняемого файла так сильно повлияет на время запуска?

Ответы [ 3 ]

1 голос
/ 28 августа 2010

Спасибо за вашу помощь.У меня есть ответ, и он не имеет отношения к Process.Start.

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

0 голосов
/ 27 августа 2010

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

Когда вы дважды щелкаете свое приложение, вы загружаете только одно приложение и все его DLL.

Когда вы запускаете свое диагностическое приложение, вы сначала загружаете первоеприложение с его сборками .NET, которые должны быть JIT'd (как раз во время компиляции: что не бесплатно).Только после того, как все это будет сделано, тогда ДРУГОЕ приложение запускается.Если ваше целевое приложение также является приложением .NET, то весь цикл повторяется.

0 голосов
/ 27 августа 2010

Ваша подсказка должна быть о том, что Process.Start() находится в пространстве имен System.Diagnostics. Когда вы запускаете процесс таким способом, вы подключаете к нему несколько мониторов / инспекторов. Это определенно добавляет накладные расходы.

Возможно, вы захотите попробовать немедленно вызвать Dispose() для объекта Process после его запуска (во избежание излишне длительного мониторинга процесса), но вы не сможете полностью избежать связанных с этим издержек. *

...