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

  • BeginnersTech

    BeginnersTec

    8 NİSAN 2011
  • natescamp

    natescamp

    30 NİSAN 2009
  • Perihelion

    Perihelion

    23 NİSAN 2008