यहां एक जिज्ञासा है जिसका मैं जांच कर रहा हूं। एनईटी डिक्शनरी कक्षा एक परीक्षण में एसटीएल unordered_map की तुलना में हास्यास्पद तेजी से प्रदर्शन करता है, और मैं यह नहीं समझ सकता कि क्यों।सी ++ से सी # में तेजी से हैश तालिका?
(0.5 सेकंड बनाम मेरी मशीन पर 4 सेकंड) (.NET 3.5 एसपी 1 बनाम विजुअल स्टूडियो 2008 एक्सप्रेस SP1 के एसटीएल)
दूसरी ओर, अगर मैं सी # और सी में अपने हैश तालिका को लागू ++ , सी ++ संस्करण सी # एक जितना तेज़ है, जो ठीक है क्योंकि यह मेरी सामान्य समझ को मजबूत करता है कि देशी मशीन कोड कभी-कभी तेज़ होता है। (देखें। मैंने कहा "कभी-कभी"।) मैं दोनों भाषाओं में एक ही व्यक्ति हूं, मुझे आश्चर्य है कि माइक्रोसॉफ्ट से सी # कोडर क्या चाल सकता है कि माइक्रोसॉफ्ट से सी ++ कोडर नहीं था? मुझे यह समझने में परेशानी हो रही है कि एक कंपाइलर अपने आप पर इस तरह की चाल कैसे चला सकता है, यह समझने की परेशानी के माध्यम से मनमाने ढंग से कार्य कॉल करने के लिए क्या देखना चाहिए।
यह एक साधारण परीक्षण है, भंडारण और पूर्णांकों को पुन: प्राप्त।
सी #:
const int total = (1 << 20);
int sum = 0;
Dictionary<int, int> dict = new Dictionary<int, int>();
for(int i = 0; i < total; i++)
{
dict.Add(i, i * 7);
}
for(int j = 0; j < (1 << 3); j++)
{
int i = total;
while(i > 0)
{
i--;
sum += dict[i];
}
}
Console.WriteLine(sum);
सी ++:
const int total = (1 << 20);
int sum = 0;
std::tr1::unordered_map<int, int> dict;
for(int i = 0; i < total; i++)
{
dict.insert(pair<int, int>(i, i * 7));
}
for(int j = 0; j < (1 << 3); j++)
{
int i = total;
while(i > 0)
{
i--;
std::tr1::unordered_map<int, int>::const_iterator found =
dict.find(i);
sum += found->second;
}
}
cout << sum << endl;
सी ++ संस्करण एक शब्दकोश है जैसे आपके द्वारा लिखा गया है? –
मूल मशीन कोड क्या है? आपको क्या लगता है सी # के रूप में चलता है? –
आप प्रदर्शन को कैसे मापते हैं? – stefanB