优化Windows窗体性能

来源:软件水平考试    发布时间:2012-11-04    软件水平考试视频    评论

  优化 Windows 窗体性能
  Windows 窗体为智能客户端应用程序提供了内容丰富的用户界面,并且您可以使用许多种技术来帮助确保 Windows 窗体提供最佳性能。在讨论特定技术之前,对一些可以显著提高 Windows 窗体性能的高级原则进行回顾是有用的。
  1)小心创建句柄。Windows 窗体将句柄创建虚拟化(即,它动态创建和重新创建窗口句柄对象)。创建句柄对象的系统开销可能非常大;因此,请避免进行不必要的边框样式更改或者更改 MDI 父对象。
  2)避免创建带有太多子控件的应用程序。Microsoft? Windows? 操作系统限制每个进程最多有10,000 个控件,但您应该避免在窗体上使用成百上千个控件,因为每个控件都要消耗内存资源。本节的其余部分讨论您可以用来优化应用程序用户界面性能的更为具体的技术。使用 BeginUpdate 和 EndUpdate许多 Windows 窗体控件(例如,ListView 和 TreeView 控件)实现了 BeginUpdate 和 EndUpdate 方法,它们在操纵基础数据或控件属性时取消了控件的重新绘制。通过使用BeginUpdate 和 EndUpdate 方法,您可以对控件进行重大更改,并且避免在应用这些更改时让控件经常重新绘制自身。此类重新绘制会导致性能显著降低,并且用户界面闪烁且不反应。例如,如果您的应用程序具有一个要求添加大量节点项的树控件,则您应该调用 BeginUpdate,添加所有必需的节点项,然后调用 EndUpdate。下面的代码示例显示了一个树控件,该控件用于显示许多个客户的层次结构表示形式及其定单信息。
  
  即使在您不希望向控件添加许多对象时,您也应该使用 BeginUpdate 和 EndUpdate 方法。在大多数情况下,您在运行之前将不知道要添加的项的确切个数。因此,为了妥善处理大量数据以及应付将来的要求,您应该总是调用 BeginUpdate 和 EndUpdate 方法。注调用 Windows 窗体控件使用的许多 Collection 类的 AddRange 方法时,将自动为您调用 BeginUpdate 和 EndUpdate 方法。使用 SuspendLayout 和 ResumeLayout许多 Windows 窗体控件(例如,ListView 和 TreeView 控件)都实现了 SuspendLayout 和 ResumeLayout 方法,它们能够防止控件在添加子控件时创建多个布局事件。如果您的控件以编程方式添加和删除子控件或者执行动态布局,则您应该调用 SuspendLayout 和 ResumeLayout 方法。通过 SuspendLayout 方法,可以在控件上执行多个操作,而不必为每个更改执行布局。例如,如果您调整控件的大小并移动控件,则每个操作都将引发单独的布局事件。这些方法按照与 BeginUpdate 和 EndUpdate 方法类似的方式操作,并且在性能和用户界面稳定性方面提供相同的好处。下面的示例以编程方式向父窗体中添加按钮:
  [C#]
  private void AddButtons()
  {
  // Suspend the form layout and add two buttons.
  this.SuspendLayout();
  Button buttonOK = new Button();
  buttonOK.Location = new Point(10, 10);
  buttonOK.Size = new Size(75, 25);
  buttonOK.Text = "OK";
  Button buttonCancel = new Button();
  buttonCancel.Location = new Point(90, 10);
buttonCancel.Size = new Size(75, 25);
  buttonCancel.Text = "Cancel";
  this.Controls.AddRange(new Control[]{buttonOK, buttonCancel});
  this.ResumeLayout();
  }
  [Visual Basic .NET]
  Private Sub AddButtons()
  ' Suspend the form layout and add two buttons
  Me.SuspendLayout()
  Dim buttonOK As New Button
buttonOK.Location = New Point(10, 10)
  buttonOK.Size = New Size(75, 25)
  buttonOK.Text = "OK"
  Dim buttonCancel As New Button
buttonCancel.Location = New Point(90, 10)
  buttonCancel.Size = New Size(75, 25)
  buttonCancel.Text = "Cancel"
  Me.Controls.AddRange(New Control() { buttonOK, buttonCancel } )
  Me.ResumeLayout()
  End Sub
  每当您添加或删除控件、执行子控件的自动布局或者设置任何影响控件布局的属性(例如,大小、位置、定位点或停靠属性)时,您都应该使用 SuspendLayout 和 ResumeLayout 方法。

软考站考试大编辑推荐:
2009年全国计算机软件水平考试报名信息汇总2009年软考重大变革系统分析师下半年停考
2009年上半年全国计算机专业技术资格考试安排2009年下半年全国计算机专业技术资格考试安排
2009年5月全国计算机软考水平考试真题及答案2009年5月全国计算机软件水平考试成绩查询
2009年全国计算机软考考试大纲汇总软考站点加入收藏夹
更多优质资料尽在考试大论坛 考试大在线题库

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答