Jest wiele sposobów dzięki którym możemy skrócić czas wyświetlania się komunikatu "Loading..." ;). Podstawową sprawą jest sposób zapisu danych na dysku. Powszechnie wiadomo, operacje na wielu małych plikach wykonują się dłużej, niż na jednym, im równoznacznym. Możemy więc stworzyć własny wirtualny system plików (VFS). Na czym on polega? Najczęściej spotykana implementacja takiego rozwiązania, to spakowane archiwa (rar, zip, 7z...). Jeden plik przechowuje w sobie dane wielu plików, które dodatkowo są spakowane. Najbardziej klasycznym przykładem, gry która korzysta z tego rozwiązania jest Quake 3. Zasoby gry były spakowane w oddzielne pliki *.pk, w których to dodatkowo zastosowano kompresję.
Podobnie sprawa ma się z pamięcią. Przydział kilkuset niewielkich porcji pamięci, jest znacznie mniej wydajny niż jednorazowe wywołanie funkcji przydzielającej pamięć dla większego bloku danych.
Dzięki operatorowi placement new, możliwe jest przydzielanie pamięci pod wskazany adres. Co nam to daje? Przydzielamy określony blok pamięci (ustalony z góry, lub obliczony) i posługując się wskaźnikiem na ową pamięć wywołujemy wyżej wspomniany placement new, który przydzieli zasoby pod określonym mu adresem. Następnie (po wcześniejszym rzutowaniu na char*), zwiększamy ten wskaźnik o rozmiar zablokowanego obiektu (operator sizeof()), by podczas kolejnego przydziału nie nadpisać istniejących danych. Dzięki temu dodawanie kolejnych obiektów będzie odbywało się znacznie mniejszym kosztem. Pamiętać należy tylko o tym, że wcześniej zaalokowana pamięć nie jest elastyczna - kiedyś się wyczerpie. Najlepiej, jeśli wcześniej posiadamy informacjie o ostatecznym rozmiarze ładowanych danych i dla niego przydzielimy pamięć.
Przedstawione sposoby, mimo, że bardzo proste, potrafią czasem dość znacząco przyśpieszyć działanie naszych superwydajnych aplikacji ;).
W następnych notkach postaram napisać coś o optymalizacji obliczeń matematycznych ;)
Brak komentarzy:
Prześlij komentarz