मुझे .NET में यह अजीब व्यवहार मिला और फिर भी CLR via C# में देखने के बाद भी मैं उलझन में हूं। मान लेते हैं कि हम एक विधि और एक वर्ग है कि imlements साथ एक अंतरफलक करते हैं यह:सी #: क्यों इंटरफ़ेस चर के लिए क्लास चर के लिए कार्यान्वित इंटरफ़ेस विधि कॉलिंग तेज है?
interface IFoo
{
void Do();
}
class TheFoo : IFoo
{
public void Do()
{
//do nothing
}
}
फिर हम सिर्फ इस वर्ग का दृष्टांत और यह करने के() विधि को दो तरह से समय की एक बहुत कुछ कॉल करना चाहते हैं: ठोस वर्ग चर का उपयोग कर होगा
Elapsed time: 6005
Elapsed time: 6667
अंतर यह है कि बहुत ज्यादा नहीं है, इसलिए मैं नहीं: (कम से कम मेरे लिए)
TheFoo foo1 = new TheFoo();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (long i = 0; i < 1000000000; i++)
foo1.Do();
stopwatch.Stop();
Console.Out.WriteLine("Elapsed time: " + stopwatch.ElapsedMilliseconds);
IFoo foo2 = foo1;
stopwatch = new Stopwatch();
stopwatch.Start();
for (long i = 0; i < 1000000000; i++)
foo2.Do();
stopwatch.Stop();
Console.Out.WriteLine("Elapsed time: " + stopwatch.ElapsedMilliseconds);
हैरानी की बात बीत बार% के बारे में 10 अलग-अलग हैं और एक अंतरफलक चर का उपयोग कर ज्यादातर मामलों में इस बारे में बहुत चिंता मत करो। हालांकि मैं यह नहीं समझ सकता कि आईएल कोड में देखने के बाद भी ऐसा क्यों होता है, इसलिए अगर कोई मुझे कुछ स्पष्ट करने के लिए इंगित करता है तो मैं सराहना करता हूं कि मुझे याद आ रही है।
मैंने आपके परीक्षण चलाए और मुझे वास्तव में एक बहुत अलग परिणाम मिला।विलुप्त समय: 12125 विलुप्त समय: 11682. मैं स्पष्ट रूप से एक धीमी मशीन पर चल रहा हूं। इस तरह के प्रदर्शन को मापना कठिन है क्योंकि ऐसे कारक हैं जो खेल में हो सकते हैं जो स्पष्ट नहीं हैं। –
@ क्रेग शायद आपके पास कुछ प्रक्रिया हस्तक्षेप है। मेरे पास 10 बार के लिए इस मिनी-बेंचमार्क पर बहुत ही लगातार परिणाम हैं। –
@ इवान मैंने पोस्ट करने से पहले इसे कई बार चलाया और लगातार परिणाम प्राप्त किए। मैं बस गया और इसे लूप में डाल दिया और इसे 10 बार पहले वापस चला रहा था। मेरे पास मशीन पर बहुत कम चल रहा है और मैं लगातार पहले मामले को धीरे-धीरे देख रहा हूं। यह अब एक महत्वपूर्ण अंतर है, लगभग 2: 1। मैंने एक और वर्ग भी जोड़ा जो स्पष्ट रूप से इंटरफ़ेस को लागू करता है और उस पर परीक्षण चलाता है। यह दूसरे मामले के समान ही भाग गया। आप किस ढांचे का उपयोग कर रहे हैं? हो सकता है कि मतभेदों के लिए खाते हैं। –