Zarejestruj Zapomniałeś hasła?
Przechowywanie zmiennych - wydajność
Piorunujące wrażenie!
Dodany 14 sierpnia 2009, 10:36 Odsłon 2754
Kategoria Inne Ocena
 (11 głosów)
Wstęp
Pewnego razu znalazłem na swoim biurku karteczkę z zapisanymi na niej liczbami. Po chwili zastanowienia przypomniałem sobie, że są to notatki z mojego testu wydajności pluginów do przechowywania zmiennych. Po pewnym czasie, udało mi się przypomnieć, na czym mniej więcej polegał test.
W poziomie były 3 liczniki : aktualne fps'y, średnie fps'y, numer aktualnej klatki oraz 2 o których za chwilę. Co klatkę wpisywałem do aktualnie testowanego plugina aktualną wartość fps'ów - jako kolejną wartość - i uruchamiałem fast loopa tyle razy, ile już jest wartości. Co pętlę fast loopa dodawałem do licznika średnich fps'ów wartość zapisaną w testowanym pluginie a na koniec dzieliłem przez ilość pętli, dzięki czemu wychodziła mi średnia ilość fps'ów.
Dwa liczniki o których wspomniałem wcześniej były dodatkowym testem. Pamięć mnie zawodzi, ale pamiętam, że były na nich testowane dzielenie i mnożenie wartości z testowanego plugina. Gra miała ograniczenie 500 fps'ów. Test trwał 10000 klatek, co równało się wpisaniu 10000 zmiennych.

W testach wzięły udział:
- Named Variable Object
- Array
- Ini
- Data Store 2
- Global Store X
- AssArray
- Dynamic Array

Named Variable Object
Plugin przechowujący zmienne liczbowe i tekstowe, mogą być one globalne. Jego plusem jest to, że zmienne są nazywane przez użytkownika, a nie jak w większości przypadków numerowane. Minusem jest dość niska wydajność w porównaniu do innych pluginów.
Wynik: 166, 167 fps.

Array
Prosta tablica. Jedno, dwu lub trójwymiarowa. Całkiem dobra wydajność, jeden z szybszych pluginów.
Wynik: 284, 288 fps.

Ini
Znany i lubiany Ini. Ma całkiem przyjemny podział na grupy, wartości są nazywane przez użytkownika, może przechowywać zmienne tekstowe i numeryczne. Jest tylko jeden haczyk. Każdy odczyt i zapis zmiennej równa się zapisowi na dysk. Zajmuje chlubne pierwsze miejsce w rankingu na najwolniejszy plugin.
Wynik: Mniej niż 10 fps.

Data Store 2
Jeden z szybszych pluginów. Może przechowywać zmienne tekstowe i numeryczne. Wynik prawdopodobnie byłby niższy, ponieważ test nie dobiegł końca. Powód? Może przechować TYLKO 1000 zmiennych liczbowych.
Wynik: 259, 262 fps.

Global Store X
Plugin do globalnego przechowywania intów, shortów, booli oraz stringów. Spora część użytkowników pewnie i tak nie ma pojęcia czym się one róznią, ale wydajność ten plugin ma niezłą.
Wynik: 287, 289 fps.

AssArray
Plugin ze śmieszną nazwą. Jest to prawie to samo, co Named Variable Object. Zmienne tekstowe i numeryczne są nazywane przez użytkownika. "Prawie" oznacza sporo niższą wydajność.
Wynik: Mniej niż 70 fps.

Dynamic Array
Przejście dla zwycięzcy. Kilkuwymiarowa tablica mająca sporo najróżniejszych opcji. Zmienne są numerowane, ale kartka i długopis raczej nie gryzą.
Wynik: 290, 288 fps.

Podsumowanie
Zwyciężył Dynamic Array.
Global Store X jest zaraz za nim.
Array wraz ze swoją prostotą trzyma się kawałek za czołówką.
Data Store 2 jest dość daleko za pierwszą trójką, ale raczej ma z nimi małe szanse.
Named Variable Object stara się, ale daleko mu do czwartego.
AssArray ma małe szanse.
Ini odpadł na starcie.
Komentarze
Cremmy @ 23 września 2009, 20:22
Wszystko pod wzgledem wartosci liczbowych. Odczyt, zapis, pelny serwis.
RomanX @ 23 września 2009, 19:58
Wypadałoby też sprecyzować, czy Array testowałeś pod względem wartości czy ciągów (może przechowywać to lub to).
Omenski @ 17 sierpnia 2009, 14:40
Fajny artykuł, taka wiedza z pewnością przyda się użytkownikom. P.S. Wie ktoś czy Dynamic Array 2 jest wolniejszy od jedynki? Wg mnie nie powinno być różnic szybkościowych w odczycie i zapisie (przynajmniej znaczących), to nie SQL:).
RomanX @ 15 sierpnia 2009, 15:32
Dynamic Array był skazany na zwycięstwo. Z drugiej strony, Data Store 2 jest banalnie prosty w obsłudze. Fajny test, ale zabrakło Binary Array.
Cremmy @ 14 sierpnia 2009, 12:49
Odczyt byl testowany, na nim wlasnie polagalo wyswietlanie srednich fps'ow. Co klatke uruchamiany byl fast loop 'ilosc klatek' razy - w polowie testu 5000 razy, na koniec 10000 - i co kazda jego petle byla odczytywana kolejna wartosc z plugina. Ini++ nie znalazlem na liscie w chwili robienia testu ;<
Ostatnio edytowane 14 sierpnia 2009, 12:50 przez Cremmy
lamberski @ 14 sierpnia 2009, 12:44
Przy przechowywaniu danych wg mnie bardziej liczy się szybkość ich odczytu, bo to robi się o wiele częściej. Szkoda, że nie przetestowałeś rozszerzeń pod tym względem, bo na pewno też są różnice. Fajnie byłoby do testów dołączyło rozszerzenie INI++, bo tam nie trzeba przy każdym zapisaniu zmiennej fizycznie ją zapisywać do pliku. W sumie trafiłeś tym artykułem w to, nad czym ja od wczoraj się głowię. Właśnie nad wyborem najlepszego rozszerzenia do przechowywania danych ^^
Mefisto @ 14 sierpnia 2009, 12:28
Ciekawy artykuł.;)
Dodaj komentarz
Kolor:   Rozmiar:

Dodał Cremmy
Profil PW
Twoja ocena
Inne tego autora
b/d
^ Do góry
© 2009 - 2012 Fabryka Gier. Publikowanie materiałów tylko za zgodą autorów.
Realizacja: Maciej Lamberski *-: