【问题标题】:What's the overhead of TPanel over TBevelTPanel 比 TBevel 的开销是多少
【发布时间】:2011-11-23 03:21:39
【问题描述】:

我正在做一个项目,他们基本上将 TPanel 用于显示斜面的唯一目的(也许在设计时 Panel 比斜面更方便)。

好的,我知道 TPanel 比 TBevel 重。除此之外,每个 TPanel 创建一个用户对象,这是一个有限的资源。

我想知道,除了用户对象之外,TPanel 的开销是多少?它是不是几乎不存在(尤其是在现代机器上)。

如果您正在开发这样的系统,您会建议:

  • 返回并将所有 TPanel 更改为 TBevel。
  • 说“好吧,这很糟糕。以后不要再这样做了” 或
  • 关注点太小了,设计时的便利性很好 值得。

【问题讨论】:

  • 这可能是 Windows 3.1 时代的一个问题。
  • 这个问题无法回答,IMO。每个答案都取决于太多的未知变量(例如,“基本使用”可能意味着“完全”或“有时”或“经常”或“总是”)。正如安德烈亚斯所说,我不会担心。主要关注的是 TPanel 使用的资源(窗口句柄、画布的设备上下文等),在 32 位和 64 位 Windows 下,它们大部分不再是问题,而且 VCL 做得很好在需要时创建它们并缓存以避免释放和重新分配。
  • 架构方面的考虑可以让这完全不成问题,例如根据需要创建/释放表单,而不是在应用程序启动时全部创建。
  • 使用任何你喜欢的 - 它没有明显的区别。

标签: windows delphi


【解决方案1】:

我不知道这种设计是否是故意的,但是当控件在一个窗口中组合在一起时,导航行为会略有不同。如果通过箭头键更改焦点,则在具有最后一个 tab 顺序的那个之后,第一个控件将被聚焦(下/右),反之亦然(上/左)。 IOW 焦点将被包裹在父级中。当然,如果任何控件都不需要箭头键的话。

关于这个问题,正如 cmets 中已经说明的那样,除了用完对象池中的计数之外,还有其他与窗口相关联的资源。它还会浪费一些 CPU 周期。在剪辑链或消息传递或保留一个 z 顺序列表等中将再增加一层。MSDN puts it as(我猜是指导航方面而不是视觉分区):

为了获得最佳性能,需要在逻辑上划分其主窗口的应用程序应该在主窗口的窗口过程中进行,而不是使用子窗口。


尽管如此,正如 cmets 中已经再次指出的那样,很可能没有人能够分辨出几个面板造成的性能或资源差异。..

【讨论】:

  • 我想补充一点:最重要的区别可能与桌面堆内存的消耗有关。在 WinXP 的默认设置下,我经常会耗尽资源。在后 WinXP 版本中,桌面堆内存的默认值至少是原来的 4 倍(在 Win64 中更多)。请参阅:support.microsoft.com/kb/126962/en-us
【解决方案2】:

正确答案是选择#3,所以如果这是项目的设计方法,不要改变它。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2017-09-27
    • 1970-01-01
    • 2011-05-17
    • 2012-01-05
    相关资源
    最近更新 更多