为什么要添加悬挂性和恢复性降低性能



我需要在父控件中添加很多控件。

,但是我发现是否在将这些控件添加到父母之前和之后添加ParentControl.SuspendLayoutParentControl.ResumeLayout,我使用秒表来测量tick:如果我删除代码ParentControl.SuspendLayoutParentControl.ResumeLayout,它将更快。为什么会发生?

因此,SuspendLayoutResumeLayout不应该减少添加子控件的时间,对吗?那么,使用SuspendLayoutResumeLayout或换句话说,如果我不使用SuspendLayoutResumeLayout,但是直接将子控件添加到父母,什么是不好的?

是什么好处。

您可能想使用.resumelayout(false)。称为mysubpanel.resumelayout()等于.resumeLayout(true),这意味着它应该立即重新延长此控件(以及当时不暂停的所有儿童控制)。

>

msdn Quote:"如果有任何待处理的布局请求,请呼叫resumelayout方法[无参数]迫使立即布局。"[1]

如果您就像在面板中添加100个控件,则要使用这样的方法:

  1. mainpanel.suspendlayout()
  2. 创建子控制
  3. 致电child.suspendlayout()
  4. 更改子控制属性
  5. 将子控制器添加到Mainpanel
  6. 呼叫Child.Resumelayout(false) - 这意味着:下一个布局运行,转移此控件,但不立即
  7. 每个孩子控制的重复(2-6)
  8. 致电mainpanel.resumelayout(true) - 这意味着:现在我的Mainpanel和每个孩子控制!

注意:如果没有sustendlayout(),则每个属性更改的每个属性都会调用布局范围 - 甚至更改.backcolor都会使您的控件重新划分本身。

[1] http://msdn.microsoft.com/en-us/library/y53zat12.aspx

这是出于通常的原因,删除代码通常会使您的程序运行速度更快。

暂停/resumelayout()被普遍误解。仅当您具有具有非默认自动化,停靠或锚定属性的控件时,它将有效果。当控件具有相互影响的布局属性时,它可以防止布局事故。

如果您的控件具有百万的表格,则根本不太可能使用这些属性。如此庞大的窗口不容易借给自动布局。因此,您正在调用实际上没有做任何事情的方法,它们需要时间来迭代布局,但没有好处。

最新更新