I’m making a simple 2D game for Windows Phone 7 (Mango) using the XNA Framework.
I’ve made the following observations:
- Most of the drawing operations accept
floats SpriteBatch.Drawaccepts aRectanglewhich usesints- The
Mathclass acceptsdoubles as parameters and also returnsdoubles
So my code is full of typecasts between ints, floats and doubles. That’s a hell a lot of typecasts.
Is there any way I can get rid of them or I should just not care about this?
Also, do these typecasts present a measurable performance loss?
I noticed this too but unless you notice any speed decrease, it could be considered a micro-optimization. Converting between
floatandintis relatively expensive whereas converting betweenfloatanddoubleis cheap. So wherever you don’t need to perform afloattointconversion, you can avoid it. Type casting is generally cheaper than actual conversion (e.g. usingConvert.ToInt32).However, all of this is unlikely to be a bottleneck unless you’re performing it many times. Also, from this post:
Unofficial numbers, but I think the last one is quite an accepted method. Also, doubles are often thought to be slower than floats, but this comes down to the system it’s running on. AFAIK, Windows Phone is optimized to use
doubles, which would explain theMathclass accepting those.All in all, I’d say it’s quite common to see casting occur quite a bit with the XNA framework. Of course, it should be avoided whenever possible, but it’s unlikely to be the source of bottlenecks for games unless you need to perform it often, in which case other areas may be easier to optimize (or a redesign of the game structure might be required).