SORU
26 HAZİRAN 2009, Cuma


C#, küçük kod örnekleri kıyaslama bu uygulama geliştirilmiş olacak?

Oldukça sık ÇOK küçük kod parçaları en hızlı olduğunu görmek için kendimi kıyaslama buluyorum.

Oldukça sık kod kıyaslama dikkate jitting ya da çöp toplayıcı almaz yorumlar görüyorum.

Yavaş yavaş evrim geçiriyorum şu basit karşılaştırma işlevi var:

  static void Profile(string description, int iterations, Action func) {
        // warm up 
        func();
        // clean up
        GC.Collect();

        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i  ) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

Kullanımı:

Profile("a descriptions", how_many_iterations_to_run, () =>
{
   // ... code being profiled
});

Bu uygulama, herhangi bir kusuru yok. Z yineleme üzerinde implementaion X Y uygulama daha hızlı olduğunu göstermek için yeterince iyi mi? Bunu geliştirmek için herhangi bir yolu olabilir mi?

EDİT Onun bir zaman yaklaşımı yineleme (karşıt olarak), tercih olduğu gayet açık, herkes zaman denetler performans etkisi olmayan herhangi bir uygulamaları var mı?

CEVAP
26 HAZİRAN 2009, Cuma


İşte değiştirilmiş fonksiyon: toplum tarafından önerildiği gibi, bu bir topluluk wiki değiştirmek için çekinmeyin.

static void Profile(string description, int iterations, Action func) {
    // warm up 
    func();

    var watch = new Stopwatch(); 

    // clean up
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();

    watch.Start();
    for (int i = 0; i < iterations; i  ) {
        func();
    }
    watch.Stop();
    Console.Write(description);
    Console.WriteLine(" Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds);
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008