Çoğu zaman SO'da hangi uygulamanın en hızlı olduğunu görmek için kendimi küçük kod parçalarını karşılaştırırken buluyorum.
Sıklıkla kıyaslama kodunun jitting veya çöp toplayıcıyı hesaba katmadığı şeklinde yorumlar görüyorum.
Yavaş yavaş geliştirdiğim aşağıdaki basit kıyaslama işlevine sahibim:
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 uygulamanın herhangi bir kusuru var mı? X uygulamasının Y uygulamasından Z üzerinde yinelemelerden daha hızlı olduğunu göstermek yeterince iyi mi? Bunu iyileştirmek için herhangi bir yol düşünebiliyor musun?
DÜZENLEME Zamana dayalı bir yaklaşımın (yinelemelerin aksine) tercih edildiği oldukça açık, herhangi birinin zaman kontrollerinin performansı etkilemediği herhangi bir uygulaması var mı?