delphidelphi-2009doublebuffered

Why is DoubleBuffered disabled by default?


After creating a new form, I usually perform this ritual:

  1. Change the name into something meaningful;
  2. Type a Caption;
  3. Change the position property (DefaultPosOnly is hardly ever what users expect);
  4. Set ShowHint to true;
  5. Set DoubleBuffered to true;

I've been wondering for a while why the default value is 'False'. To me it just looks low-tech and crappy, and on my new machine I don't notice any difference in performance.

Is doublebuffering problematic on older machines, VNC, Remote Desktop or in Virtual Machines maybe?

Do you leave it on or off? Any recommendations?


Solution

  • As you probably know, a double buffer normally involves creating an off-screen memory buffer the same size as the visual component. Writing/drawing is performed on this buffer and when complete, the entire buffer is "swapped" so that it is now painted on the visual component.

    (Note: "swapping" may consist of simply changing the address a pointer points to, or may actually involve copying a chunk of memory such as using BitBlt, memcpy etc)

    Therefore a reasonable amount of memory allocated to support this process for each component it is enabled for. If your application has many windows or and/or components there would be a not insignificant amount of memory allocated. If you do not require smooth visual updates/scrolling, why waste this memory?

    Of course there is also an argument that today most computers have plenty of memory to spare, so why worry. However I still don't see this as a reason to default to enabling Double Buffering if you don't need it.

    If manually setting DoubleBuffered to true is a pain for you, you could always create your own custom control/component that inherits from the built-in control, and sets DoubleBuffered (and other properties) to your required defaults.