W grze Twoim głównym celem jest osiągnięcie docelowej prędkości klatek na docelowej maszynie o minimalnej specyfikacji (i ewentualnie maksymalnym czasie ładowania itp.).
Aby to zrobić, nie musisz się martwić po każdej linii.
Musisz martwić się wcześniej, ilekroć wybierzesz określoną strategię, algorytm lub kontener. Jeśli dosłownie uniemożliwisz osiągnięcie celu poprzez podejmowanie niewłaściwych decyzji projektowych, wówczas jakakolwiek optymalizacja, którą możesz zrobić później, nie przyniesie rezultatu.
Następnie musisz się martwić, gdy coś jest równoległe lub równoległe. Gry są masowo równoległe, jeśli nie bez innego powodu, to dlatego, że grafika jest.
Dlatego równoległe oznacza nie tylko „wątki”, ale także na przykład graficzny interfejs API, dostęp do dysku lub sieć. Ilekroć tracisz szansę posiadania czegoś, co można łatwo i natywnie równolegle uruchomić równolegle, na przykład z powodu złej synchronizacji (lub w ogóle z powodu niestosowania asynchronicznego interfejsu API), tracisz więcej niż kiedykolwiek możesz zoptymalizować za pomocą innych środków.
Musisz się również martwić, gdy coś się pojawijest dobrze znany jako wąskie gardło lub źródło kramów lub przeszkodę w osadzaniu się kamienia. Takich jak na przykład przełączanie stanów renderowania, rysowanie połączeń, odczytywanie z GPU lub otwieranie plików.
Na koniec, gdy skończysz, a testy wykażą, że nie osiągasz docelowej liczby klatek, musisz zoptymalizować. Znajdź jedno największe wąskie gardło, które zajmuje 90% czasu, i zoptymalizuj to. Jeśli to nie wystarczy, znajdź sekundy największe.
Jeśli osiągniesz cel, gratulacje. Idź dalej i zapomnij o tym.