J’ai observé un comportement curieux où le traitement dans Unity Editor (TestRunner) prend 2,5 s lorsque l’éditeur est au premier plan, mais ralentit à 15 s quand je bascule immédiatement vers une autre application, mettant ainsi l’éditeur en arrière-plan.
De plus : si je mets l’éditeur en arrière-plan mais que je déplace constamment la souris au-dessus de la fenêtre de l’éditeur, le traitement se termine dans le même temps que si l’éditeur était au premier plan tout le temps.
Je suppose que c’est une optimisation de Windows (11 ?) qui ralentit volontairement les applications en arrière-plan. Je n’ai pas trouvé de moyen de désactiver cela pour une application particulière ou à l’échelle du système en tant qu’utilisateur final. Une telle option existe-t-elle pour les utilisateurs finaux, ou existe-t-il une solution de contournement ?
Y a-t-il quelque chose qu’un développeur d’application puisse faire pour empêcher ce comportement ?
Parce que j’ai observé que le même problème n’existe pas quand on exécute Unity Editor sur Ubuntu 22 dans VMware - les tests se terminent toujours rapidement, que je mette l’éditeur en arrière-plan dans la VM ou non, et même quand je mets la VM entière en arrière-plan. Cela me donne espoir qu’il existe des moyens de prévenir ce comportement.
Pour info : le problème complet a été documenté comme un rapport de bug à Jetbrains et sur le forum Unity. J’espère ne pas avoir à attendre un correctif de l’une ou l’autre application, je préférerais ajuster un paramètre système et corriger ce comportement Windows hautement indésirable pour de bon.
J’ai déjà essayé de modifier les paramètres suivants sans succès :
-
Le Mode d’interaction d’Unity Editor (Preferences => General) défini sur "No Throttling" et "8 ms" (120 Hz)
-
Utiliser le Gestionnaire des tâches pour définir le processus Unity.exe sur "Realtime"
-
Désactiver "Hardware-Accelerated GPU Scheduling" (Paramètres : Système>Affichage>Graphiques>Paramètres graphiques par défaut)
-
Via les Paramètres système avancés : Options de performance => Avancé, j’ai défini "Ajuster pour les meilleures performances de : Services d’arrière-plan"
-
Désactiver le "Mode Jeu"
-
Définir le plan d’alimentation sur "Meilleures performances"
-
Écrire un script AutoHotkey qui déplace la souris de 1 px toutes les ms, mais cela accélère l’exécution de seulement 50 % (8 s) et nécessite que le curseur soit au-dessus de la fenêtre de l’éditeur
-
Changer SystemResponsiveness à 64 (100 %) (voir ci-dessous) et ajouter NoLazyMode=1 (dans la même clé de registre)
-
Désactiver la protection en temps réel de Windows Defender (voir commentaire)
-
Désactiver le power throttling de unity.exe via powercfg
-
Ajuster manuellement Win32PrioritySeparation dans le registre
Les deux dernières astuces viennent de ce post superuser.
Solution de contournement temporaire :
C’est une solution étrange mais qui fonctionne de manière fiable pour moi dans Unity 2021.2 et versions ultérieures. Cependant, elle doit être réappliquée manuellement après chaque compilation de script / rechargement d’assemblage.
-
Ouvrez Preferences : General => Busy Progress Delay
-
Cliquez et glissez le label pour changer la valeur (n’importe quelle valeur convient tant qu’elle est changée - IMPORTANT : cela ne fonctionne pas en entrant une valeur directement dans le champ texte !)
-
Lancez les tests unitaires et mettez l’éditeur en arrière-plan. Le test continue de s’exécuter rapidement.
J’ai essayé de modifier la clé EditorPrefs correspondante "EditorBusyProgressDialogDelay" avant de lancer les tests, mais cela ne semble apparemment pas déclencher le code qui fait que les tests s’exécutent réellement plus vite. Si quelqu’un a une idée de comment désassembler le code de l’éditeur pour les Préférences Générales, cela pourrait aider car je pourrais alors appeler cette méthode (possiblement interne).
Note supplémentaire : définir le Mode d’interaction sur No Throttling rend généralement les tests 30 % plus rapides sur mon système !
Source : Super User