Mise en mémoire tampon double et connexions distantes
Remonter à Utilisation des contrôles - Index
Selon les meilleures pratiques recommandées, les applications ne doivent pas utiliser la mise en mémoire tampon double lorsqu'elles sont exécutées via une connexion à un bureau distant, car cela nécessite le transfert de tout le bitmap hors mémoire via la connexion au bureau distant.
Pour cette raison, depuis RAD Studio 11.1, TApplication possède deux nouvelles propriétés publiques et un nouvel événement public pour gérer la mise en mémoire tampon simple et double lorsque les applications sont exécutées via une connexion à un bureau distant.
Le gestionnaire d'événement OnRemoteSessionChanged est déclenché lorsque la session passe d'un état local à distant et vice-versa. Il peut redéfinir le comportement par défaut de la mise à jour de InRemoteSession via son paramètre var InRemoteSession.
La propriété InRemoteSession renvoie un booléen. Elle renvoieTruesi la session en cours est distante (par exemple lorsqu'elle est exécutée via RDP) etFalses'il s'agit d'une session locale, en supposant que le gestionnaire d'événement OnRemoteSessionChanged n'a pas redéfini son comportement par défaut.
Enfin, la valeur par défaut de la propriété SingleBufferingInRemoteSessions est définie sur True, ce qui entraîne que tous les contrôles VCL sans thème ignorent la propriété DoubleBuffered lorsqu'ils sont exécutés dans une session distante. Si la valeur est définie sur False, les contrôles sans thème continuent d'utiliser la mise en mémoire tampon double lors des sessions distantes.
Au démarrage (depuis la procédure Run), l'objet TApplication vérifie si la session en cours est locale ou distante. Une notification est envoyée lorsque l'état passe de local à distant et vice-versa lors de l'exécution du programme. Le comportement reste le même que le type de la session soit défini au démarrage ou qu'il change à l'exécution :
- L'événement OnRemoteSessionChanged se déclenche lorsque le nouvel état de la session est transmis dans un paramètre var. Le code utilisateur peut empêcher que le changement soit pris en compte.
- En supposant que le changement n'ait pas été « masqué » par le gestionnaire d'événement, InRemoteSession est définie pour indiquer si la session en cours est distante ou locale. Cette propriété peut donc être utilisée par le code utilisateur.
Si InRemoteSession et SingleBufferingInRemoteSessions ont toutes les deux la valeur True, les contrôles VCL sans thème ignorent leur propriété DoubleBufferered et utilisent la mise en mémoire tampon simple.
Pour les contrôles avec thème et les hooks de styles, le code ne doit utiliser la mise en mémoire tampon double que si le code suivant donne True :
DoubleBuffered and (not InRemoteSession or not SingleBufferingInRemoteSessions)
En d'autres termes, le contrôle est configuré pour utiliser la mise en mémoire tampon double indépendamment de l'état de la session (locale ou distante) si le développeur de l'application veut que la mise en mémoire tampon double soit appliquée.