एसओ पर अक्सर मैं खुद को कोड के छोटे हिस्से बेंचमार्किंग करता हूं यह देखने के लिए कि कौन सा उपकरण सबसे तेज़ है।
काफी बार मैं ऐसी टिप्पणियां देखता हूं कि बेंचमार्किंग कोड जटिंग या कचरा संग्रहकर्ता को ध्यान में नहीं रखता है।
मेरे पास निम्नलिखित सरल बेंचमार्किंग फंक्शन हैं जो मैंने धीरे-धीरे विकसित किए हैं:
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);
}
उपयोग:
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
क्या इस कार्यान्वयन में कोई दोष है? क्या यह दिखाना काफी अच्छा है कि कार्यान्वयन X, Z पुनरावृत्तियों पर कार्यान्वयन Y से तेज है? क्या आप इसे सुधारने के किसी भी तरीके के बारे में सोच सकते हैं?
संपादित करें यह बहुत स्पष्ट है कि एक समय आधारित दृष्टिकोण (पुनरावृत्तियों के विपरीत) को प्राथमिकता दी जाती है, क्या किसी के पास कोई कार्यान्वयन है जहां समय की जांच प्रदर्शन को प्रभावित नहीं करती है?