0

不久前,我的应用程序开始需要很长时间才能显示主窗口。我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 位应用程序运行。

4

0 回答 0