2013-01-14 36 views
0

现在,我面临一个非常奇怪的问题。我们有一个.net解决方案。这是一个比较大的解决方案,其中包含大量项目。在一个负责GUI的项目中,我们在客户端应用程序启动之前使用VB.net创建了大量的winforms(标签,按钮,列表框等)。最近,客户问我们为什么我们的客户端应用需要更多时间来初始化。为什么“New System.Windows.Forms.Button”需要更多的时间在我的.net应用程序

当我深入我们的代码时,发现只有一块“Me.BtnMenu = New System.Windows.Forms.Button”子句需要大约10ms才能完成。实际上,在客户端GUI初始化之前,我们需要构建数百个winform。最近,我们将我们的解决方案从vs2008迁移到vs2010。相比之下,在vs2008版本中,“New System.Windows.Forms.Button”的成本约为0〜1ms,而在vs2010版本中,“New System.Windows.Forms.Button”的成本约为10〜 20ms,这最终会延迟GUI的初始化。更有趣的是,像GroupBox,Panel,RadioButton等其他控件在这两个版本中都不花费太多时间,只有按钮设置。

有没有人对此有任何意见?它困扰了我好几个星期,我仍然无法得到它。

+0

您可以尝试测量在独立的项目/解决方案中创建按钮需要多长时间?只是为了确定它是否是你的项目或机器中的其他东西可能会造成这种延迟。 –

+0

感谢您的回复并提供建议。它变得越来越有趣,当我从我们的项目中分离出一个表单并将此表单导入新解决方案时,问题依然存在,甚至更糟。在我的原始项目/解决方案中,需要大约500ms来初始化所有这些控件,大约需要200ms。 似乎它与项目/解决方案的设置无关,例如已启用优化。 –

+1

10-20毫秒是这些熟悉的数字之一。您可以在Windows上测量流逝时间的精确度。与代码没有任何关系。使用*真正的分析器*。 –

回答

0

它也可能是导致此问题的Button对象的父级。有时,如果面板/窗体在将新控件添加到其集合时重新计算/重新绘制布局,那么添加简单按钮等简单操作会花费更多时间。如果您正在使用自定义面板或在添加/删除控件时计算的布局,请尝试将表单元素直接添加到表单。

此外,检查父窗体/面板是否有一个方法,可以暂停重绘窗体或停止布局计算,例如, BeingUpdate/EndUpdate(或类似的)。

相关问题