You can use the StopWatch command. Start it and Stop it in certain locations and popup a message box after certain events showing the time. This will help you to start learning where your time loss is.
Just FYI, this is always an issue if you have too many assemblies that need to be loaded at the same time on the same form....but you can overcome this by pre-loading the assemblies. I promise that this works, but you are going to have to expand the code I gave you earlier by making sure any assemblies in the child are loaded as well. That is why it is fast the second time you go in....the assemblies are loaded in the AppDomain.
One thing you can do is cycle through the loaded assemblies in the AppDomain.CurrentDomain before and after the child is loaded. You will see that there are more assemblies loaded after than before. This might help you pinpoint which assemblies you are missing.