Zauważyłem to również, ale jeśli nie zauważysz zmniejszenia prędkości, można to uznać za mikrooptymalizację. Konwersja między float
i jest stosunkowo droga, natomiast konwersja pomiędzy float
i jest tania. Gdziekolwiek nie musisz wykonywać konwersji, możesz uniknąć tego. Odlewanie typu jest zwykle tańsze niż faktyczna konwersja (na przykład przy użyciu Convert.ToInt32
). Jednak to wszystko nie jest wąskie gardło, chyba że wykonujesz je wiele razy. Również z this post:
- float, double i int mnożenia mieć taką samą wydajność ==> użyć odpowiedniego rodzaju numeru dla swojej aplikacji, bez obawy
- telefon jest 4x do 10x wolniej niż PC używam do rozwijania moich aplikacji ==> testuj z prawdziwym telefonem, nie ufaj komputerowi do operacji matematycznych
- Podziały są do 8 razy wolniejsze niż multiplikacje! ==> nie używaj podziałów, np. spróbuj użyć 1/A następnie pomnożyć
nieoficjalnych liczb, ale myślę, że ten ostatni jest dość akceptowaną metodą. Podwójne są często uważane za wolniejsze od pływaków, ale sprowadza się to do systemu, na którym działa. AFAIK, Windows Phone jest zoptymalizowany do używania doubles
, co wyjaśniałoby, że klasa Math
je akceptuje.
Podsumowując, dość często widzę, że rzutowanie odbywa się w oparciu o framework XNA. Oczywiście należy go unikać, gdy tylko jest to możliwe, ale jest mało prawdopodobne, aby był źródłem wąskich gardeł dla gier, chyba że trzeba go często wykonywać, w takim przypadku inne obszary mogą być łatwiejsze do optymalizacji (lub może być wymagane przeprojektowanie struktury gry)).
Jeśli to możliwe, użyj klasy XNA "MathHelper". Ma kilka metod i stałych, które są spławikami. http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper%28v=XNAGameStudio.40%29.aspx – SomeWritesReserved
Hm, to bardzo miłe! :) Brakuje tylko funkcji trygonometrycznych. – Venemo