मैंने देखा कि सी # जिटर सी ++ कंपाइलर की तुलना में मापने योग्य धीमी कोड उत्पन्न करता है, भले ही कोई "प्रबंधित ओवरहेड" संरचनाएं न हों (जैसे चेक किए गए अनुक्रमण वाले सरणी)।सी # जिटर सुधार
public static int count = 1000000000;
public static int Main()
{
int j = 0;
for (int i = 0; i < count; ++i)
{
j += (i % 2 == 0) ? ((i + 7) >> 3) : (i * 7);
}
return j;
}
इस पाश 3.88s लेता है निष्पादित करने के लिए (/ ओ के साथ संकलित):
यह मात्रा ठहराना करने के लिए, मैं निम्नलिखित सरल पाश समय समाप्त हुआ। वीसी 2010 (-ओ 2) के साथ संकलित समतुल्य लूप 2.95s लेता है।
यह सत्यापित करने के लिए कि निम्न कोड वास्तव में जेनरेट किया गया था, मैंने मशीन कोड की तुलना की: वीसी कंपाइलर से एक लिस्टिंग (/ एफएएस) बनाया, और सी # प्रोग्राम (लूप पूरा होने के बाद) में डीबगर लगाया।
वास्तव में, सी ++ संस्करण कुछ चालाक चाल का उपयोग कर रहा है। उदाहरण के लिए 7 तक महंगा गुणा से बचने के लिए, एक अलग रजिस्टर है जो प्रत्येक लूप गणना 7 द्वारा बढ़ाया जाता है। सी # संस्करण हर बार गुणा (imul) करता है। अन्य मतभेद भी हैं।
मैं समझता हूं कि सी # जिटर के पास बिल्ड समय पर वीसी की तुलना में रनटाइम पर कोड संकलित करने के लिए बहुत कम समय है। लेकिन उदा। जावा जिटर गतिशील रूप से अक्सर उपयोग किए जाने वाले तरीकों को अनुकूलित कर रहा है। सी # ऐसा नहीं प्रतीत होता है।
मेरा प्रश्न है: क्या भविष्य के ढांचे संस्करणों में सी # जिटर को बेहतर बनाने की योजना है?
.NET 4 के साथ विजुअल स्टूडियो आरसी 2012।5 कल से डाउनलोड के लिए उपलब्ध है। इसे डाउनलोड करें (यह मुफ़्त है) और वहां एक ही परीक्षण चलाएं। –
मैंने बहुत समय पहले जिटर द्वारा किए गए नए अनुकूलन के लिए अपनी सांस पकड़ना बंद कर दिया है। एमएस लगता है कि यह उस विभाग में काफी अच्छा है। – harold
@harold कब से? –