Odblokowałem ilość klatek na sekundę w MonoGame poprzez:
this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;
Wykorzystując go jako podstawę do aktualizacji i rysowania w grze.
Przy rozdzielczości 240 x 160 bez rysowania lub aktualizowania niczego oprócz licznika klatek otrzymuję wartość FPS od 9 000 do 11 000 FPS.
Jeśli dodam z powrotem cały mój kod, spada do około 1100 FPS.
Czy to dobra wskazówka, że mój kod znacznie spowalnia procesor graficzny (10x) i czy powinienem się martwić? Gra będzie działać przy 60 FPS, więc wciąż jestem daleko od tego, ale w którym momencie w odblokowanej liczbie klatek powinienem się martwić?
Karta graficzna: AMD FirePro W5000 (FireGL V)
monogame
frame-rate
test
źródło
źródło
Odpowiedzi:
Tylko nieuprzejmie.
Po pierwsze, FPS nie jest miarą liniową . Różnica między 11k FPS a 9k jest bardzo mała (0,0000201 sekundy na klatkę). Ale różnica między 60 a 2060 FPS (delta 2k FPS, ta sama, która istnieje między 11k a 9k) wynosi 0,0161 sekundy ... znacznie większa. Może być więc niebezpieczny jako wskaźnik wydajności po prostu dlatego, że duże różnice mogą, ale nie muszą być tak złe.
Zamiast tego użycie czasu na klatkę jest nieco łatwiejsze do uzasadnienia, ale nawet wtedy jest to bardzo szeroki obraz sytuacji. Mówi tylko, ile sekund zajmuje jedna klatka gry. Nie mówi ci dlaczego , chyba że spojrzysz na znaczny wzrost czasu klatek natychmiast po dodaniu lub włączeniu jednej konkretnej funkcji.
Może to być podstawowy barometr do decydowania o czasie do bardziej szczegółowego profilowania. Szczególnie źle jest używać FPS do określania, czy jesteś związany z procesorem, czy GPU; Profilowanie GPU nie jest tak łatwe jak mierzenie czasu na procesorze (gdzie prawdopodobnie znajduje się twój taktowanie i kod obliczeniowy FPS).
Jeśli chodzi o to, kiedy powinieneś się martwić ... cóż, powiedziałeś, że gra była ukierunkowana na 60 FPS. Jeśli zaczniesz spadać w pobliżu lub poniżej tego, prawdopodobnie musisz zacząć uważniej myśleć o swoich problemach z wydajnością. Do tego czasu skupiałem się na tym, aby wszystko działało, a potem martwiłem się, aby było to szybkie .
źródło
Nie rozumiem, dlaczego nie mogłeś tego użyć! Pamiętaj, że być może będziesz musiał kodować inaczej, aby uwzględnić różnice między stałym / zmiennym znacznikiem czasu, więc jeśli planujesz naprawić go w momencie wydania, musisz wprowadzić poprawki. Zobacz ten artykuł: http://rbwhitaker.wikidot.com/time-steps
Może to być również procesor. Zalecam okresowe uruchamianie wbudowanego profilera Visual Studio (lub za każdym razem, gdy zauważysz duży spadek liczby klatek na sekundę), aby znaleźć gorące punkty w kodzie.
To oczywiście zależy od sprzętu, na który celujesz. Musisz przetestować swój kod na komputerach o najniższych wymaganiach minimalnych, które chcesz obsługiwać. Jeśli działa tam co najmniej 60, nie martwiłbym się zbytnio.
źródło