Производительность: найти причину задержки
С чего начать, если игра тормозит: кадр, CPU, загрузка, потоки и измеримый результат.
Сначала зафиксировать проблему
Запишите целевое устройство, разрешение, графические настройки, сборку и воспроизводимое действие: например, «поворот камеры на площади с 200 персонажами». Измерение пустого уровня не отвечает на вопрос о задержке в этой сцене. Разделите постоянную нехватку FPS, редкий долгий кадр и ожидание загрузки: у них разные причины.
| Цель | Бюджет одного кадра |
|---|---|
| 30 FPS | около 33,33 мс |
| 60 FPS | около 16,67 мс |
| 120 FPS | около 8,33 мс |
Бюджет — 1000 / FPS, а не гарантированное время для каждого скрипта. CPU, GPU, ожидание синхронизации и показ кадра могут перекрываться. Нельзя просто сложить все показания разных потоков и получить длительность кадра.
Выбрать следующий шаг
| Наблюдение | Действие |
|---|---|
| Низкий FPS или отдельные подвисания | Снимите интервалы кадров, p95 и максимум в одинаковом сценарии |
| Подозрение на игровой код | Измерьте конкретный участок и проверьте CPU и ограничения C# профилирования |
| Тяжёлое независимое вычисление | Вынесите только данные в фоновую задачу, применяйте результат в главном потоке |
| Нужно понять рост очереди или число объектов | Добавьте собственный счётчик |
| Ошибка доступа к Entity из потока | Разделите владельцев данных по правилам потокобезопасности |
Снижение разрешения при неизменной сцене помогает проверить гипотезу о затратах отрисовки. Улучшение после отключения одной игровой системы помогает локализовать CPU-работу. Это диагностические опыты, а не доказательство по одному изменённому параметру: сохраните замеры и проверьте повторно.
Критерий готовности
Изменение полезно, когда нужный сценарий на целевом устройстве укладывается в бюджет, редкие задержки приемлемы, результат игры сохранился, а память и время загрузки не выросли сверх лимита. Укажите условия и сравнивайте несколько одинаковых прогонов. «Стало быстрее на моём компьютере» без сценария и чисел не является критерием.
Примеры раздела проверяют правильность статистики и жизненного цикла задач в установленной Windows-сборке 1.0.0. Они не доказывают FPS вашей игры, ускорение от многопоточности или производительность других платформ.