25
|
Wouter van Nifterick Andrey · 技术社区 · 15 年前 |
![]() |
1
32
正如您可能知道的,双缓冲区通常包括创建与可视组件大小相同的屏幕外内存缓冲区。在这个缓冲区上执行写入/绘制,完成后,整个缓冲区将被“交换”,以便它现在被绘制在可视组件上。 (注:“交换”可能只是简单地更改指针指向的地址,或者实际上可能涉及复制内存块,如使用bitblt、memcpy等) 因此,为支持为其启用的每个组件分配的合理内存量。如果您的应用程序有许多窗口或和/或组件,则会分配不重要的内存量。如果不需要平滑的视觉更新/滚动,为什么要浪费这个内存? 当然,还有一种观点认为,今天大多数计算机都有足够的内存可供使用,所以,为什么要担心呢?但是,我仍然不认为这是默认启用双缓冲的原因,如果您不需要它的话。 如果手动将DoubleBuffered设置为true对您来说是一件痛苦的事情,您可以始终创建自己的自定义控件/组件,该控件/组件继承自内置控件,并将DoubleBuffered(和其他属性)设置为所需的默认值。 |
![]() |
2
25
在执行某种类型的远程桌面时,应避免使用双缓冲,因为必须通过网络发送控件/窗体的整个位图来执行bitblt。看见 this blog post … |
![]() |
3
12
在进行桌面合成的现代操作系统上,双缓冲实际上可能会降低性能。渲染会被执行到屏幕外的位图中,因此使用双缓冲会导致额外的复制,这对那些系统毫无好处。因此,除非VCL足够聪明,在这种情况下可以忽略双缓冲(不知道是否需要检查),否则实际上最好不要无条件地设置它。 编辑:
我查过了,在Delphi2007和Delphi2009中
|
![]() |
4
1
您还可以创建一个设计时专家,自动为您创建的每个窗体/控件设置该值,而不是为每个现有的涉及更多工作的窗体/控件派生新的控件。 请参阅gexperts.org上的源代码,了解如何实现这一点。 |
|
user3403621 · 如何在C++Builder 2010中实现双缓冲? 11 年前 |