我正在开发一个感觉缓慢的 WinForms 项目。它由数以百计的用户控件组成。如果有一个 UI 功能(即使没有在应用程序的其他任何地方使用),它也会封装在用户控件中。我已经使用 ANTS 分析器多次完成了该项目,并且大部分繁重的代码似乎都在各种控件构造函数中。

在我开始删除用户控件之前,它们是否代表了 WinForms 应用程序的大量开销,而不是仅仅布局没有用户控件的表单(例如,只是内部控件)?

最佳答案

我一直在用户控制 hell ,这并不好玩。我注意到的一些事情:

  • 如果您有太多的用户控件并四处移动或滚动表单,您可能会看到大量白色闪烁,因为深度嵌套的窗口句柄的绘制操作会争夺渲染时间。当您第一次打开表单时,这一点尤其明显。
  • 小心设计器中的嵌套用户控件。如果在设计器中打开用户控件,则不会调用构造函数(它实际上通过解析编译器生成的代码来生成设计器图面)。但是,该用户控件使用的用户控件将调用其构造函数。这通常不是问题,但如果您看到奇怪的事情发生,就值得了解。
  • 如果您有一个包含大量用户控件的大型解决方案,VS 2008 将需要很长时间来枚举您的所有项目,以便在您第一次打开设计器 Pane 时找到所有可能的控件。这是一个相对较小的烦恼,但它会消耗时间。

  • 也就是说,用户控件绝对方便且值得适度使用。我试图避免的主要事情是嵌套过深。我发现 WPF 在这方面要好得多。它可以完全控制渲染管道,因此您不会遇到与控件深度组合相关的重绘问题。

    关于c# - 用户控件中有很多开销吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3472850/

    10-10 18:30
    查看更多