2015-03-22 22 views
9

Sorumluluk reddi: Aşağıdaki ifadeler arasında bazı yanlış anlamalar olabilir, lütfen yanlış yazılmışsa kodumu kodumun C# olarak işlendiğimde noktaya yazdığım an arasında sıfırlar veBellek düzeni optimizasyonu C#

sorulara (olanlar bağlantılıdır) şunlardır:

Ben optimizasyon teknikleri kullanıp olsun benim veri yapıları ve/veya benim veri manipülasyon uygulanması, bir performans etkisi olacak C# herhangi bir yolu var mı ?

Derleyici, çıktı alırken ne yapar, güvenilir midir? Anlamı: Verilerimi yaparsam ILA'da SOA olacak mı? Her zaman?

JIT, IL okuduğunda veri yapmam ne olur? değişti mi İşlemcime uyması için otomatik olarak optimize edilmiş mi?

cf: that talk about C/C++

Ben bu konuşma yerli kod hedeflediğini biliyoruz ve yerel kodda veri düzeni vs işlemci düzeni özelliklerini anlatıyor.

Ayrıca C# derleyicisini biliyorum ve JIT derleyicisi bu konularla ilgili olarak benim için işleri optimize eder. optimizasyon bu tür benim perfs üzerinde etkisi eğer

Temelde acaba:

  • SOA yerine AOS
  • ait
  • Vektörler erişim desenleri (bellekte bitişik erişilmesine)
  • vb .. ad ...

Oyun geliştirmede çalışıyorum ve performans çok önemli, büyük miktarda veriyi manipüle ediyoruz ve saniyede en az 24 kere yapmamız gerekiyor.

Ama o işlemci ve veri düzeni uygulamasına performans maliyeti göreceli cevap verme.

dediğinizde:


ayrıca Hans cevap verdiğini peşine için "Sen SOA takip edebilir ama bu yardımcı olmuyor Evet, programınız, çünkü bütün bu yapı kopyalama yavaşlatmak ve yapar olacaktır. böylece deterministik bir şekilde ama yağmur yağmaz.Her ikisinin de en kötüsünü, yavaş bir programı ve aynı durakları alırsınız. "

Bu, programımın SOA'dan hiçbir fayda sağlamadığı anlamına gelmiyor. Daha hızlı (potansiyel olarak) olacak çünkü verilerimi işlemeye yardımcı olacak. GC'nin kendisi üzerinde hiçbir etkisi olmayacaktır. Diğer bir şey şudur: Veri düzenimde SOA veya başka gelişmeler yapmazsam, derleyici bunu benim için düzeltmez mi? Derleyiciye güvenemiyorum. Bu tür şeylerle uğraşmak

+1

Bu düzeyde şeyler hakkında konuşuyorsanız, C# (veya herhangi bir yönetilen bellek ortamı) büyük olasılıkla sizin için uygun değildir. Ama sonra tekrar ... Gerçek Zamanlı Bilgi İşlem, Finansal Hesaplama, Büyük Veri'de çalışıyor musunuz? – Aron

+1

Gerçek Zamanlı C#, bu kontrol seviyesini vermek için düzgün bir şekilde kullanılabilir umarım –

+1

Düzen, temel olarak değiştirilmez. – harold

cevap

3

Günümüzün yağmur yağacak olup olmadığı konusunda endişelenmek gibi bir endişe var.O ya er ya da geç yağmur yağacak, onu durdurmak için hiçbir şey yapamayacaksınız ve gerektirir d, eğer bu çimenlik yeşil renkte olmasa bile yeşil renkte kalmazsınız. Asla yapmak istemediğin şey, kasıtlı olarak yağmur yağmasını engellemektir. Çünkü eğer yaparsan, o bir sığınakta aşağı inecek ve o güzel çimi dökeceksin. Sürekli bir çiselemek istediğin şey. Ve tercihen geceleri bakmıyorsanız.

.NET GC bunu güçlü bir şekilde desteklemektedir. Sadece küçük gen # 0 ve # 1 koleksiyonları programınızı duraklatacak. Kodunuz devam ederken pahalı gen # 2 koleksiyonu arka planda gerçekleşir. En kötü durum duraklama, yüz mikrosaniye yakın bir yere gider. Hangi diğer nedenleri oldukça ayırt edilemez programınızın modern bir işletim sistemi üzerinde duraklatacaktır. Oyun döngüsünüzün geçici olarak askıya alınması gibi, daha yüksek öncelikli bir çekirdek iş parçacığının çalışması gerekiyor. Sadece insan gözüne karşı gözlemlenemez bir çiseleyen.

SOA'yı takip edebilirsiniz ancak bu yardımcı olmuyor. Evet, programınız tüm bu yapı kopyaladığı için yavaşlayacak ve bunu deterministik bir şekilde yapıyor. Ama yağmur yağmaz. Her ikisinin de en kötüsünü, bir yavaş program ve tam olarak aynı durakları alırsınız.

Yağmurdan korkmayın, doğru zamanda geldiğinden emin olun. Verilerinizi yapılandırmak istediğiniz arka plan GC'lerinden faydalanmak için ya çok kısa ömürlüdür, böylece bir # 0/1 koleksiyonuyla kolayca kaybolur. Ya da çok uzun yaşar, böylece 2 numaralı evde rahat bir ev bulur ve bir süre orada kalır. Genelde programlarda, özellikle oyunlarda çok yaygın bir modeldir. Oldukça olası bir şey yapmanız gerekmiyor.

+0

"SOA'yı takip edebilirsin ama bu işe yaramaz" - ha? GC'nin programın bellek erişim kalıpları ve önbellekleme nedeniyle ortaya çıkan etkiler, vb. Için herhangi bir etkisi olmayacaktır. Ayrıca en azından .NET 4 için.5 (SustainLowLatency moduyla bile), dünyadaki hiçbir GCS'nin olmadığı doğru değil, sadece öncekinden daha nadir. – Voo

+0

Yorumunuzun alakasıyla ilgili gerçek bir fikir yok, lütfen kendi yanıtınızı gönderin. –

+1

Yorumların bir sebebinin, cevaplarda yer alan gerçekleri tartışmak olduğunu ve sadece cevapları reddetmek yerine açıklama ya da düzeltmeyi sorduğunu düşündüm. – Voo