Bei einem Client im Hintergrundfenster reduzieren Spiel, Engine und OS Frames und Verarbeitung. Empfangene Pakete werden nicht rechtzeitig verarbeitet, stauen sich oder laufen über.
Warum Hintergrund-Framelimit in Spieloptionen oder Grafiktreiber (z. B. beim NVIDIA-Treiber zwischen 20 und 200 pro Sekunde einstellbar), Energiesparmodus, Engine-Einstellung zum Pausieren im Hintergrund. Auch das OS teilt dem Fenster im Vordergrund bevorzugt CPU und GPU zu → Folge Pro Frame werden weniger Pakete verarbeitet, die Warteschlange wächst, und läuft der Empfangspuffer über, werden Pakete verworfen → Auf dem Bildschirm Holt man das Fenster nach vorn, erscheint alles auf einmal, oder einige NPCs bleiben dauerhaft unsichtbar
Netzwerkempfang in einem von der Game-Loop getrennten Thread weiterlaufen lassen, auch im Hintergrund einen Mindestdurchsatz garantieren, Einstellung der Engine für Ausführung im Hintergrund aktivieren (Unity: runInBackground).
Aufgaben Extern
Hinweis an Spieler: Hintergrund-Framelimit im Grafiktreiber und Energiesparmodus des PCs deaktivieren.
Größenordnungen
Ist in Unity runInBackground deaktiviert, hält die Game-Loop an, sobald das Fenster den Fokus verliert. Läuft der Empfang nur in dieser Loop, werden in der Zeit überhaupt keine Pakete verarbeitet.
Im Graphen
Lücke, dann alles auf einmal · Frame-Abstand im Client, verarbeitete Pakete pro Frame
Wo nachsehen
Auf demselben PC ein Fenster im Vordergrund und das andere im Hintergrund platzieren und mit vertauschten Rollen vergleichen. Mit PresentMon den Frame-Abstand beider Prozesse messen, gibt es spielseitige Logs, Fensterfokus und verarbeitete Pakete pro Frame prüfen
Spricht dafür
Nur als Hintergrundfenster steigt der Frame-Abstand stark (bei Treiberlimit flach auf dem Abstand, der der eingestellten Framerate entspricht) oder die Verarbeitung stoppt, und beim Fensterwechsel wandert das Problem zum anderen Client
Spricht dagegen
Tritt im Vordergrundfenster genauso auf: nicht die Hintergrunddrosselung. Unabhängig von der Fensterlage immer derselbe Client: „Unterschiedliche Anzeigeoptionen“ oder „Abweichende Client-Version oder Spieldaten“
Prüfmittel
Prüfung in der Umgebung des Spielers
Quellen
Application.runInBackgroundUnity Standardwert von runInBackground ist false, die App pausiert dann im Hintergrund