2011-11-01 23 views
7

Kodun ilk kez çağrılmasını beklemek yerine, JIT-ing C# kodunun önünün kolay bir yolu var mıdır? NGEN hakkında okudum ama bunun bana yardım edeceğini sanmıyorum.C# JIT ek yükü önleme

Uygulamam, bir UDP bağlantı noktasından gelen belirli bir dış olayı bekler ve bunlara yanıt verir ve kritik yol kodunun hiçbiri (a) etkinlik gelmeden önce çalışır veya (b) hiç tekrar çalışır, bu nedenle maliyet Bu senaryoda JIT yüksek. ANTS profiler ile kontrol JIT için genel gider yaklaşık% 40-50, bazen% 90 gibi yüksek. Uygulamam çok gecikme duyarlı ve her milisaniye sayar.

İlk düşüncem, her kritik yol yöntemine bir bool parametresi ekleyebilmem ve JIT derlemesini başlatmak için olay gerçekleşmeden önce bu yöntemleri çağırmaktır. Ancak, daha güzel ve daha az hacky yolu var mı?

Çok teşekkürler

+10

NGEN neden size yardım etmedi? –

+2

Bunun bir sorun olduğunu belirlediniz mi? Yoksa sadece olduğunu düşünüyor musun? –

+0

Ben (neredeyse) eminim Henk sorun. Ben sadece tek bir yöntem üzerinde uyguladı benim hacky yaklaşımı ve ANTS profiler o yöntem için JIT yükü ortadan kayboldu. – endian

cevap

5

NGEN kullanmalıyım ve eğer işe yaramazsa, muhtemelen daha derin problemleriniz vardır.

Ancak, sorunuzu yanıtlamak için, pre-jit ile ilgili bu makalede, bir JIT'i zorlamak için System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod kullanılır. Yöntem tutamaçlarını elde etmek için yansıma kullanmak için örnek kod içerir.

+2

Mükemmel, teşekkürler. Ayrıca tüm türleri için PrepareMethod çağrılarını tamamlayan bir CodeProject (!) Makalesi buldum. Buradan bağlantı kurun: http://www.codeproject.com/KB/dotnet/Jitting.aspx. – endian

3

Olay ikinci kez ne olur? Daha hızlı mı, yoksa yavaş mı. Eğer hala yavaşsa, JIT problem değildir, çünkü kod ilk kez çalıştırıldığında "JIT" yazılır. NGEN sizin için bir cevap verecektir. Benim önerim, ihtiyacınız olan kodun asgari minimumunu almak, eğer kritik bir yol ise, ve kukla/sandbox projesine koymak. Bu kodu profillemeye/NGenning'e ve performansı görmeye başlayın.

Bu çıplak minimum kod, NGEN'ed sonra bile birden fazla aramada yetersiz performans gösteriyorsa, önceden derleme size yardımcı olmayacaktır. Koddaki performans şişeleri boyuna neden olan başka bir şey.

+0

Kod, ilk etkinlikten sonra hızlı yıldırım.Yukarıda belirttiğim gibi, performans sorunlarına neden olan kesinlikle JIT ek yükünün olduğunu tespit ettim. Ben RuntimeHelpers.PrepareMethod çağrıları bir yük ekleme sürecinde, umarım bu sorunu kaldıracak. – endian

İlgili konular