SORU
28 EKİM 2010, PERŞEMBE


Hata ayıklama ve sürüm arasında performans farklılıkları oluşturur

Genellikle arasında geçiş rahatsız değil bunu itiraf etmeliyimHata ayıklamaveBırakınbenim program yapılandırmaları, ve genellikle için gitmeyi tercih ettimHata ayıklamabu programlar aslında müşteriler yerde konuşlandırılmış bile yapılandırması.

Bildiğim kadarıyla, eğer bir değişiklik olursa bu yapılandırmaları arasındaki tek fark el ileHata ayıklamavarDEBUGtanımlanmış sabit veBırakınvarOptimize kodudenetlenen.

Sorularımı aslında ikiye ayırıyoruz.

  1. Bu iki yapılandırma arasında performans farklılıkları vardır. Performans olarak büyük farklar burada neden kodu herhangi bir özel türü vardır, ya da aslında o kadar önemli değil mi?

  2. İnce altında çalışacak kod herhangi bir tür vardırHata ayıklamayapılandırma altında başarısız olabilirBırakınyapılandırma veya test ve altında iyi çalışıyor kod emin olabilirsinizHata ayıklamayapılandırma da güzel Serbest yapılandırma altında çalışacak.

CEVAP
28 EKİM 2010, PERŞEMBE


C# salınan IL Sürümde büyük bir alter kendisi değil derleyicisi. Artık kıvırcık kaşlı bir kesme noktası ayarlamak için izin NOP işlem kodları yayan önemli. Büyük bir JİT derleyici yerleşik iyileştirici. Aşağıdaki iyileştirmeleri yapar biliyorum:

  • Yöntem satır içi uygulaması. Bir yöntem çağrısı, yöntemi enjekte kodu ile değiştirilir. Bu çok önemli bir özellik set aslında ücretsiz yapar.

  • CPU ayırma kaydı. Yerel değişkenler ve Yöntem bağımsız değişkenleri hiç bir kayıt olmadan CPU (veya daha sık) yığın çerçevesi için saklı geri dönmek içinde saklı kalabilir. Bu büyük bir olay, en iyi duruma getirilmiş kod hata ayıklama çok zor farkedilir. Ve vermekuçucubir anlam kelime.

  • Dizi dizini eleme kontrol. Diziler (. ile çalışırken önemli bir iyileştirme NET tahsilat sınıfları bir dizi DAHİLİ olarak kullanın). JİT derleyici döngü asla sınırları dışında bir dizi dizinleri bundan sonra doğrulayabilirsiniz dizin kontrol ortadan kaldıracaktır. Büyük bir tane.

  • Döngü çözümü. Küçük gövdeli kısa döngüler (4) döngü gövdesinde kodu tekrar ederek ortadan kalkar. Önler şube misprediction cezası.

  • Ölü kod eleme. Eğer böyle bir deyimi (false) { /.../ } tamamen eleniyor. Bu sabit katlama ve satır içi uygulaması nedeniyle oluşabilir. Diğer durumlarda JİT derleyici kodu olası olduğunu belirlemek nerede yan etkidir. Bu en iyi duruma getirme profil oluşturma kodu bu kadar zor yapan şeydir.

  • Kod kaldırma. Döngü etkilenmez bir döngü içinde kod döngünün dışında hareket ettirilebilir.

  • Ortak alt ifade elemesi. x = 4; z y = 4; z olur = x; y

  • Sürekli katlanır. x = 1 2; x olur = 3; Bu basit bir örnek, erken derleyici tarafından yakalandı, ama diğer iyileştirmeleri zaman JİT zaman olur bunu mümkün kılıyor.

  • Yayılma kopyalayın. x = a; x = y; y = a olur. Bu kayıt ayırıcısı daha iyi kararlar vermenize yardımcı olur. Bu kadar az çalışmak kaydeder çünkü 86 Jetta ile büyük bir anlaşma olduğunu. Doğru olanları seçmek zorunda perf için çok önemlidir.

Bu yapabilir ama bu çok önemli iyileştirmeler varharikaörneğin, hata Ayıklama uygulaması yapı profili ve Serbest karşılaştırın inşa zaman fark anlaşma. Bu da tek kod kritik yol, bu yazdığınız kod 10 %5 üzerinde olsa da önemli değilaslındaetkiler programınızın perf. Doktoru sadece uygulayabilirsiniz önemli olan ön anlayacak kadar zeki değil, TAM zamanında "on dönüşmesi" tüm kodları için arama.

Programınızın yürütme zamanında bu en iyileştirmelerin etkili sonuç genellikle başka bir yerde çalışan kod tarafından etkilenir. Bir dosya okuma bağlamak sorgusu, vb yürütülüyor. İş TAM zamanında iyileştirici yapma tamamen görünmez yapar. Unutmamak :) değil

JİT iyileştirici çoğu kez test milyonlarca koyun olduğu için oldukça güvenilir bir kod. Son derece nadir programınızın Yayın oluşturma sürümünde sorunlar var. Ancak o oluyor. X 64 ve 86 sinirlilik hem yapılar ile ilgili sorunlar vardı. X 86 titreme var sorun ile kayan nokta tutarlılık, üreten kurnazca farklı sonuçlar ne zaman Ara bir kayan nokta hesaplama tutulur bir listesi de dahil olmak üzere kasada 80-bit hassas yerine elde kesilmiş ne zaman temizlendi bellek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Police

    Android Poli

    21 NİSAN 2010
  • GUN-TIME with Brandon

    GUN-TIME wit

    3 ŞUBAT 2009
  • olinerd

    olinerd

    23 AĞUSTOS 2007