ठीक है - नई सच्चाई के लिए समय!
यह एक स्ट्रिंग में किसी भी ऊपरी केस चरित्र के लिए एक परीक्षण था।
स्ट्रिंग की गारंटी थी कि पहले 60 के अक्षरों में कोई ऊपरी केस कैरेक्टर न हो। (मैंने random.org से स्ट्रिंग बनाई है)
मैंने संकलक में स्ट्रिंग प्रतिस्थापन ऑप्टिमाइज़ेशन को यादृच्छिक रूप से रोक दिया है जिसमें 64K वर्ण स्ट्रिंग को परीक्षण फ़ंक्शन में पास किया गया था।
सभी समय वास्तविक परीक्षण के आसपास बहुत सख्ती से थे, और इसमें फ़ंक्शन कॉलिंग समय शामिल नहीं था।
मैंने एक बार परीक्षण किया, 10 बार, और फिर 10,000 बार के लिए और प्रत्येक परीक्षण के लिए समय के प्रत्येक सेट औसत।
static bool testCaseOne(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
result = !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
परिणामस्वरूप औसत समय:
- 1 एक्स = 3.000
मैं एक 64 बिट पर परीक्षण 7 विन i3-2100 सीपीयू के साथ @ 3.1 Ghz
टेस्ट केस 1 भाग गया एमएस
- 10 x = 0.860 एमएस
- 10,000 x = 0।821 एमएस
टेस्ट केस 2:
- 1 एक्स = 2.000 एमएस
- 10 एक्स = 1.597 एमएस
- 10,000 एक्स = 1.603 एमएस:
static bool testCaseTwo(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
result = Regex.IsMatch(str, "[A-Z]");
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
औसत समय परिणामस्वरूप
टेस्ट केस 3:
static bool testCaseThree(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (char.IsUpper(str[i]))
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
औसत समय परिणामस्वरूप:
- 1 एक्स = 1.000 एमएस
- 10 एक्स = 0.357 एमएस
- 10,000 एक्स = 0.298 एमएस
टेस्ट केस 4:
static bool testCaseFour(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] > 64 && str[i] < 91)
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
}
औसत समय परिणामस्वरूप:
- 1 एक्स = 0.000 एमएस
- 10 एक्स = 0.137 एमएस
- 10,000 एक्स = 0.184 एमएस
दिलचस्प।
मुझे आशा है कि इस statisfies श्री आर.के.;)
स्रोत
2012-08-05 02:57:29
मैं इसे "तेज़ पर्याप्त" मानता हूं। – BoltClock
मुझे लगता है कि यह एक अच्छा दृष्टिकोण है, आप लूप के लिए काम करने के लिए LINQ का उपयोग कर सकते हैं, लेकिन जेनरेट कोड बराबर होगा। आप यह भी जांच सकते हैं कि मूल स्ट्रिंग कम मामले में परिवर्तित स्ट्रिंग के बराबर नहीं है, लेकिन मुझे उम्मीद है कि यह कम प्रदर्शन करने वाला होगा क्योंकि इसे हमेशा स्ट्रिंग के पूर्ण ट्रैवर्स की आवश्यकता होगी। – Clayton
फोर-लूप – VisualBean