【问题标题】:Why does "New System.Windows.Forms.Button" take more time in my .net application为什么“新 System.Windows.Forms.Button”在我的 .net 应用程序中需要更多时间
【发布时间】:2013-01-14 02:44:25
【问题描述】:

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

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

有人对此有任何想法吗?这让我困惑了好几个星期,但我仍然无法理解。

【问题讨论】:

  • 你能尝试测量在一个独立的项目/解决方案中创建一个按钮需要多少时间吗?只是为了确定它是否是您的项目或机器中的其他东西可能导致此延迟。
  • 感谢您的回复和建议。越来越有趣了,当我从我们的项目中分离出一个表单并将这个表单导入到一个新的解决方案中时,问题仍然存在,甚至更糟。初始化所有这些控件大约需要 500 毫秒,而在我的原始项目/解决方案中,大约需要 200 毫秒。似乎与启用优化等项目/解决方案的设置无关。
  • 10-20 毫秒是那些熟悉的数字之一。这是您在 Windows 上测量经过时间的准确度。和代码没有任何关系。使用真正的分析器

标签: .net winforms


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多