DoubleBuffer bei RemoteDesktop Verbindungen

In diesem Codeausschnitt habe ich gezeigt, wie man mit Hilfe eines Offscreen-Bitmaps unter Delphi das unerwünschte Flackern beim Neuzeichnen verhindern kann. Hier noch mal kurz das Prinzip. Anstatt auf dem Fenster direkt zu zeichnen, zeichnet man auf ein unsichtbares Bitmap im Speicher. Dieses Bitmap wird dann bei Bedarf mittels der Funktion BitBlt auf das Fenster kopiert. Dies ist wesentlich schneller, da nicht jeder Strich - oder was auch immer - einzeln gezeichnet werden muss. Denn Windows ist für schnelle Zeichenoperationen nicht optimiert.

Allerdings funktioniert dies nur lokal. Greift man per RemoteDesktop auf einen anderen Rechner zu, werden immer nur die Veränderungen übertragen, um die zu übertragende Datenmenge klein zu halten. Wird jetzt aber das Offscreen-Bitmap auf das Fenster kopiert, ändert sich für das RemoteDesktop Protokoll aber der gesamte Fensterinhalt. Was dazu führt, dass eine weitaus größere Datenmenge über das Netzwerk übertragen wird, als eigentlich nötig. In dieser Konfiguration ein Offscreen-Bitmap zu verwenden, könnte also eher kontraproduktiv sein.

Will man nun ein Offscreen-Bitmap verwenden, weil es lokal nötig erscheint, sollte man prüfen, ob das Programm in einer RDP-Session läuft und dann entscheiden, ob man ein Offscreen-Bitmap nutzt oder nicht. Herausfinden, ob das Programm in einer RDP-Session läuft, kann man mit der API-Funktion GetSystemMetrics und dem Parameter SM_REMOTESESSION.

Einen guten Blog-Eeintrag zu dem Thema gibt es auch von Raymond Chen in seinem Blog Old New Thing: Taxes: Remote Desktop Connection and painting.

2010-12-29T23:44:43 +0100, mail+homepage[at]michael-puff.de