यह प्रश्न बकवास लगता है। व्यवहार विश्वसनीय रूप से पुन: उत्पन्न नहीं किया जा सकता है।शब्दकोश। गणना प्रदर्शन
पहले उदाहरण (:
निम्नलिखित परीक्षण कार्यक्रमों की तुलना करना, मैं पहले और निम्न उदाहरण के दूसरे जो विशाल प्रदर्शन अंतर (पहला उदाहरण कारक दस सेकंड की तुलना में धीमी कर रहा है) मनाया धीमी गति से):
interface IWrappedDict {
int Number { get; }
void AddSomething (string k, string v);
}
class WrappedDict : IWrappedDict {
private Dictionary<string, string> dict = new Dictionary<string,string>();
public void AddSomething (string k, string v) {
dict.Add (k, v);
}
public int Number { get { return dict.Count; } }
}
class TestClass {
private IWrappedDict wrappedDict;
public TestClass (IWrappedDict theWrappedDict) {
wrappedDict = theWrappedDict;
}
public void DoSomething() {
// this function does the performance test
for (int i = 0; i < 1000000; ++i) {
var c = wrappedDict.Number; wrappedDict.AddSomething (...);
}
}
}
दूसरा उदाहरण (तेज):
// IWrappedDict as above
class WrappedDict : IWrappedDict {
private Dictionary<string, string> dict = new Dictionary<string,string>();
private int c = 0;
public void AddSomething (string k, string v) {
dict.Add (k, v); ++ c;
}
public int Number { get { return c; } }
}
// rest as above
मजेदार, अंतर गायब हो जाता है (पहला उदाहरण तेज़ हो जाता है) यदि मैं IWrappedDict
से WrappedDict
से सदस्य चर TestClass.wrappedDict
का प्रकार बदलता हूं। इसकी मेरी व्याख्या यह है कि Dictionary.Count
प्रत्येक बार जब इसे एक्सेस किया जाता है तो तत्वों को दोबारा गिना जाता है और तत्वों की संख्या की संभावित कैशिंग केवल कंपाइलर अनुकूलन द्वारा की जाती है।
क्या कोई इसकी पुष्टि कर सकता है? क्या किसी प्रदर्शन के तरीके में Dictionary
में तत्वों की संख्या प्राप्त करने का कोई तरीका है?
यह आश्चर्यजनक है कि इस (गिनती) संपत्ति का मूल्य प्राप्त करना एक ओ (1) ऑपरेशन 'है [शब्दकोश। गणना - एमएसडीएन] (http://msdn.microsoft.com/en-us/library/zhcy256f ।एएसपीएक्स) – Habib
मैंने आपके कोड से एक टेस्ट एक साथ रखा है, और मेरे लिए धीमी कोड तेज कोड से केवल ~ 30% अधिक लेता है। – Rawling
पुन "मुझे क्या करना चाहिए?" (मॉड-फ्लैग): उस कोड को पोस्ट करें जो आपके पास है ** ** जो आप देख रहे हैं उसे दिखाता है **, जिसमें आपके टाइमिंग तंत्र शामिल हैं। इसे चलाने योग्य बनाएं, इसलिए हम देख सकते हैं कि क्या हो रहा है। –