2011-06-06 27 views
5

C# /. NET uygulamasını güçlendirmek için yöntemler arıyorum. Bulduğum ne bugüne kadar kullanın ngenC#/NET uygulamasının yürütülmesini hızlandırma

  1. olduğunu.
  2. Dikkat uyarısı API'sini kullanırken dikkatli olunuz. when using as operator
  3. Assembly.LoadFrom() ile dll'yi yüklemek biraz zaman alır.

Başka hangi araçlar/ipuçları/iyi uygulamalar C# /. NET programından en iyi performansı elde etmek için var.

+7

Bu, çok geniş ve terstir. İlk önce kodunuzu çalışır duruma getirin, ardından somut performans sorunlarını çözün. –

+0

, MSDN makalesi [Performans (C# ve Visual Basic)] (http://msdn.microsoft.com/en-us/library/ms173196) ile başlamayı deneyin. Ayrıca Rico Mariani Tedbir, Tedbir, Tedbir –

cevap

5

Önce ngen'e dikkat edin. Aslında performansa zarar verebilir. Daha fazla bilgi için Jeff Richter'ın "C#, Üçüncü Baskıdan CLR" adlı kitabına bakın.

Uygulamamı ayarlamak için performansa ihtiyacım olduğunda şahsen bir profilleyici kullanacağım. Tercih ettiğim şey Kırmızı Kapı Karıncaları'dır, ancak piyasada bol miktarda iyi olan var. Ancak bunları kullanmak biraz zor olabilir çünkü çok fazla gürültü üretecekler.

Gördüğüm sorunların çoğu genellikle .NET Framework'den ziyade geliştirici veya genel mimariden kaynaklanıyor. Örneğin, yüklenecek ana sayfa için Veritabanına 30+ çağrı gerektiren bir Asp.Net web uygulaması.

1

Mümkün olduğunda pahalı fonksiyonları not alın. Eğer kesin bir şekilde dll'ler konuşlandırılacak için neler CPU ortamı bilene kadar

public static class Expensive 
{ 
    private static readonly ConcurrentDictionary<int, int> _map = 
     new ConcurrentDictionary<int, int>(); 

    public static int Calculate(int n) 
    { 
     return _map.AddOrUpdate(n, Add, (key, value) => value); 
    } 

    static int Add(int key) 
    { 
     return 0; 
    } 
} 
+1

diyor, Ancak, bunu körü körüne yapmayın. – SLaks

1

Sen ngen kullanmamalısınız. Ve diğer CPU türlerinde konuşlandırılmayacaklarından emin olun. X86 yerel dosyasını derler ve x64'te dağıtırsanız bu kötü olur. Derleyicinin JIT yapabildiği tüm optimizasyonları kaybedersiniz.

Performans, uygulamanızın yapmaya çalıştığı şeye bağlıdır. Bir masaüstü müzik çalar uygulaması vs db odaklı bir web uygulaması olsaydı yönergeler çok farklı olurdu. Ama çok büyük bir Xml doc yüklemek için XmlDocument kullanarak ve çok iş parçacığı yapmak için dahili CLR ThreadPool sınıfını kullanarak, boks/kutulama, yansıma çok kaçınmak için bakmak gerekir olmalıdır, bir kaç isim için IDisposable uygulamak unutmayın.

1

Birkaç kez, uygulamayı hızlandırmak için kodları yeniden yazarak geçirdim. Aslında, binlerce kez çağrılan CompareTo uygulamasında bir darboğaz olduğunu öğrendim.

  • kullanın aprofiler.
  • 'un neyin önemli olmadığını en iyi duruma getirmek için zaman kaybetmeyin.
  • Neler olduğunu öğrenin.
İlgili konular