Pertanyaan Bagaimana saya dapat menghindari sering int / float / double cast ketika mengembangkan aplikasi XNA?


Saya membuat gim 2D sederhana untuk Windows Phone 7 (Mangga) menggunakan XNA Framework.

Saya telah membuat pengamatan berikut:

  • Sebagian besar operasi menggambar menerima floats
  • SpriteBatch.Draw menerima a Rectangle yang menggunakan ints
  • Itu Math kelas menerima doublesebagai parameter dan juga mengembalikan doubles

Jadi kode saya penuh dengan typecast antara ints, floats dan doubles. Itu banyak sekali typecasts.

Apakah ada cara saya dapat menyingkirkan mereka atau saya tidak peduli tentang hal ini?

Juga, apakah typecasts ini menyajikan kerugian kinerja yang terukur?


5
2018-01-11 23:27


asal


Jawaban:


Saya perhatikan ini juga, kecuali jika Anda melihat ada penurunan kecepatan, itu bisa dianggap sebagai optimasi mikro. Konversi antara float dan int relatif mahal sedangkan konversi antara float dan double murah. Jadi di mana pun Anda tidak perlu melakukan float untuk int konversi, Anda dapat menghindarinya. Pengecoran jenis umumnya lebih murah daripada konversi sebenarnya (mis. Menggunakan Convert.ToInt32).  Namun, semua ini tidak mungkin menjadi hambatan kecuali Anda melakukan berkali-kali. Juga, dari posting ini:

  • float, pengganda ganda dan int memiliki kinerja yang sama ==> gunakan jenis nomor yang tepat untuk aplikasi Anda, jangan khawatir
  • ponsel ini 4x hingga 10x lebih lambat daripada PC yang saya gunakan untuk mengembangkan aplikasi saya ==> menguji dengan ponsel asli, tidak mempercayai PC Anda untuk operasi matematika
  • pembagian hingga 8x lebih lambat daripada perkalian! ==> jangan menggunakan divisi, mis. coba gunakan 1 / a lalu kalikan

Nomor tidak resmi, tetapi saya pikir yang terakhir adalah metode yang cukup diterima. Juga, ganda sering dianggap lebih lambat daripada pelampung, tetapi ini tergantung pada sistem yang sedang berjalan. AFAIK, Windows Phone dioptimalkan untuk digunakan doubles, yang akan menjelaskan Math kelas menerima itu.

Secara keseluruhan, saya akan mengatakan itu sangat umum untuk melihat casting terjadi cukup sedikit dengan kerangka XNA. Tentu saja, itu harus dihindari sebisa mungkin, tetapi itu tidak mungkin menjadi sumber kemacetan untuk permainan kecuali Anda harus sering melakukannya, dalam hal mana area lain mungkin lebih mudah untuk dioptimalkan (atau desain ulang struktur permainan mungkin diperlukan ).


2
2018-01-11 23:53



Jika Anda khawatir tentang konversi Rectangle, ada overload yang mengambil Vector2 sebagai gantinya, yang berbasis float:

http://msdn.microsoft.com/en-us/library/ff433988.aspx

Perhatikan sumber (tekstur) masih berbentuk persegi panjang tetapi ini biasanya statis (bukan kata kunci C #) static tetapi tidak berubah, tidak dinamis).


0
2018-01-12 03:40