tags:

views:

90

answers:

3

I'm trying to profile the startup time of my application, so I wrote a small C# program that will start my application using the Process.Start() method, and time it using a stopwatch.

When I try to start the application myself (by just clicking on it), it probably takes 2-3 seconds. When I try to start the application using my test program, it takes 8-10 seconds. The startup time consistently differs in that magnitude.

Any idea why using Process.Start to start an executable would affect startup times so much?

A: 

Your clue should be that Process.Start() is in the System.Diagnostics namespace. When you start a process in this manner, you're attaching a bunch of monitors/inspectors to it. This definitely adds an overhead.

You might want to try immediately calling Dispose() on the Process object after you start it (in order to avoid unnecessarily-prolonged process monitoring), but you will not be able to completely avoid the associated overheads.

Bradley Smith
I don't see anything in the documentation about use of Process.Start resulting in slower runtime performance for the spawned application. Do you have any links? I would be interested in reading up on that.
Kirk Woll
A: 

Simply put, you are starting actually two process's not just one. That's why it takes longer.

When you double click on your app, you are loading just one application and all it's DLL's.

When you run your diagnostic app, you first are loading the first application with it's .NET assemblies which have to be JIT'd (Just in time compilation: which is not free). Only then after that is all done, then the OTHER application gets to start. If your target app is also a .NET app, then the whole cycle repeats itself.

C Johnson
He's timing it with a Stopwatch, so presumably he's measuring only the startup time of the Process, and not the startup time of his test app.
Kirk Woll
+1  A: 

Thanks for all your help. I have the answer, and it's unrelated to Process.Start.

After I start the process, I was waiting for a specific window handle to appear to know that the app actually showed up. The loop was too tight. I introduced a 200 ms sleep in the while loop, and startup time was normal again.

dreadpirateryan
dreadpirateriyan, please select this as answer, even if it is from yourself to help others find this faster.
Marcel