不久前,我的应用程序开始需要很长时间才能显示主窗口。我System.Diagnostics.Profiler
在表单构造函数中添加了一个如下:
Private m_profiler As New System.Diagnostics.Stopwatch
Public Sub New()
' This call is required by the designer.
m_profiler.Restart()
InitializeComponent()
m_profiler.Stop()
Rhino.RhinoApp.WriteLine("InitializeComponent() took {0}ms", m_profiler.ElapsedMilliseconds)
' Add any initialization after the InitializeComponent() call.
End Sub
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Rhino.RhinoApp.WriteLine("InitializeComponent() init took {0}ms", m_profiler.ElapsedMilliseconds)
Me.components = New System.ComponentModel.Container()
.....yada yada yada
结果是:
InitializeComponent() init took 2572ms
InitializeComponent() took 2837ms
所以几乎所有的时间都花在调用InitializeComponent()
方法上,我认为这是因为 jitting。我可以做些什么来加速主窗体的显示吗?
在没有任何控件的情况下显示表单,在后台线程中加载这些控件以便编译它们,然后在 UI 线程上实例化新控件并将它们添加到表单中是否有意义?
我能做些什么来找出这段时间真正占用的东西吗?
我的应用程序是一个非托管 C++ 桌面应用程序的纯 .NET 插件,它公开了一个 .NET SDK。它目前在 Windows 7 上作为 64 位应用程序运行。