Tamam, sadece bağlantı kurduğunuz rantta bazı delikler açmak için:
- "C #" Tam Zamanında "bir yorumlayıcıya dayanır - yanlış - bir JIT derleyicisidir . Bir yöntem bir kez JITted yapıldıktan sonra , derlenen kod her çağrı için yeniden kullanılır. Derlenmiş kod yerel, önceden derlenmiş koda çok yakındır.
- "Xenon CPU bir" yerinde "işlemci" - "sırayla" mı demek? - Ve: "Xenon CPU'nun dal tahmini yok" . Bu, JIT derlemesinin doğal olarak CPU tarafından yeniden sipariş edilmesi gereken ve çok fazla dallanmaya neden olan kötü kod ürettiği anlamına gelir - ki bu tamamen saçmalıktır . Bu CPU mimarisinde çalıştırmak için aynı performans önerisi hem C ++ hem de C # için geçerlidir.
- "[JIT] 360 üzerinde sürekli yıkama gerektirir" - yanlış, derlenmiş kod normal derlenmiş kodlar gibi önbellekte tutulabilir. (Boru hattını yıkamak anlamına geliyorsa, yukarıdaki noktaya bakın.)
- "jenerik [...] kod üretmeyi kullan" - jenerikler diğer her şey gibi JIT'tir ve diğer her şey gibi JITted kodu da hızlıdır. Jenerik kullanımı için performans cezası yoktur.
- "dilin tüm seksi bitleri [...] her iki dal tahminini gerektirir ..." - bu C ++ için de geçerli değil mi? - "... veya [...] yerinde kod oluşturma" - JITting mi demek? Hızlı olduğunu söylemiş miydim? ( Masaüstü CLR'nin gerçek kod oluşturmayı kullandığı tüm yerlere girmeyeceğim - Xbox 360 tarafından desteklenmeyen bir özellik!)
- "[C #] [C ++] 'ın muazzam kütüphanelerine sahip değil" - diyelim ki XNA? Ve daha fazlası . (Yine de, bu biraz adil bir nokta.)
Xbox 360 üzerindeki XNA, .NET Compact Framework CLR'nin değiştirilmiş bir sürümünde çalışır. Masaüstü sürümünün standartlarına uygun olmadığından şüphem yok. JITter muhtemelen iyi değil - ama bunun da kötü olduğunu düşünmüyorum . Masaüstü CLR ile karşılaştırıldığında korkunç olan çöp toplayıcısından bahsetmediğine şaşırdım .
(Tabii ki, profesyonel olarak geliştirilmiş bir oyunda çöp toplayıcıya vurmamalısınız , tıpkı herhangi bir profesyonel dereceli oyunda tahsislere dikkat etmelisiniz .)
(.NET Compact Framework'ün gerçek teknik tartışması için belki de şu makale serisiyle başlayın: Genel Bakış , JIT Derleyici ve GC ve yığın .)
Terminolojisi hakkında tamamen belirsiz olduğu, ne demek istediğini anlamayı bile zorlaştırıyor. Ya maksimum rant modunda ya da ne hakkında konuştuğunu bilmiyor.
Şimdi yolumdan o olduğuna göre burada bazı şeyleri vardır do 360 XNA kullanarak yerine yerli giderek kaçırmak :
- Gerçekten çok hızlı CPU kayan nokta matematiği yapmak için SIMD / Vektör birimine erişim
- Muhtemelen C # 'dan biraz daha hızlı olacak yerel dil kodunu kullanabilme
- Yetenek bir olmak biraz bellek tahsis nasıl bit lazier
- XBLIG oyunları 6 çekirdekten sadece 4'üne erişebilir (ancak yine de 3 CPU'yu da alıyoruz ve tam çekirdek de değiller, bu yüzden çok fazla kaçırmıyoruz) - bunun XBLIG olmayan XNA için geçerli olup olmadığından emin değilim oyunlar
- Gerçekten belirsiz grafik hile yapmak için tam DirectX erişimi
Bunların yalnızca CPU tarafı kısıtlamaları olduğunu belirtmek gerekir. GPU'da hala tamamen ücretsiz erişiminiz var.
Ben böyle şeyler anlatılan bu cevabı etkin bir şekilde bu aynı sorudur ne. Bu cevapta bahsettiğim gibi XNA "profesyonel" gelişim için kesinlikle uygundur .
Bundan kaçınmanızın tek nedeni, C # yeteneklerini kiralayamamanız, C # motorlarını lisanslayamamanız ve mevcut C # kodunu mevcut C ++ bilgisinin tabanıyla aynı şekilde yeniden kullanamamanızdır. Veya C # 'ı desteklemeyen bir platformu da hedefliyor olabilirsiniz.
Tabii ki, "profesyonel" geliştirici olmayan birçoğumuz için, XNA, Xbox 360'a geçmek için tek seçeneğimiz ve bu noktayı tartışıyor.
Diğer sorularınızı cevaplamak için:
C # Hiçbir şey aslında veri odaklı yaklaşımlar kullanılarak durur tam olarak aynı şekilde sen C bunları kullanmak istiyorum ++.
C # kod derleme zamanında otomatik satır içi yeteneği yok ve (kontrol etmek için gitmeden) kompakt CLR JITter satır içi yöntemleri (masaüstü CLR olabilir) emin olamaz. Bu nedenle, performans açısından kritik kod için, C ++ 'da bazı yardımlar sağlayan C #' da el ile satır içi yapmanız gerekebilir.
Muhtemelen C #'daki çarpışma algılama ve sıvı simülasyonları gibi CPU-matematik yoğun şeylerini sık sık görmemenizin daha büyük bir nedeni, vektör birimine (yukarıda belirtildiği gibi) erişim eksikliğidir.