जब मैं स्ट्रिंग परिचालन पर Regex का उपयोग करना चाहिए और इसके विपरीत केवल प्रदर्शन के बारे में?तेज़ क्या है: रेगेक्स या स्ट्रिंग ऑपरेशंस?
उत्तर
यह
निर्भर करता है हालांकि स्ट्रिंग परिवर्तन आमतौर पर कुछ हद तक तेजी से हो जाएगा, वास्तविक प्रदर्शन भारी एक संख्या पर निर्भर कारकों में से:
- कितनी बार आप regex पार्स
- कैसे चतुराई से आप अपने स्ट्रिंग कोड
- चाहे regex precompiled है लिखने
regex और अधिक जटिल हो जाता है, यह बहुत अधिक प्रयास ले जाएगा और समरूपता स्ट्रिंग मैनिपुलेशन कोड लिखने के लिए जटिलता जो अच्छी तरह से प्रदर्शन करती है।
मैं दो कार्यों FunctionOne (स्ट्रिंग आपरेशन) और FunctionTwo (Regex) कहा जाता है के साथ कुछ मानक किया है। उन्हें दोनों '<' और '>' के बीच सभी मैच मिलना चाहिए।
बेंचमार्क # 1:
- बार कहा जाता है: 1'000'000
- इनपुट: 80 अक्षर
- अवधि (स्ट्रिंग आपरेशन // FunctionOne): 1.12 सेकंड
- अवधि (regex ऑपरेशन // FunctionTwo): 1.88 सेकंड
बेंच rk # 2:
- बार कहा जाता है: 1'000'000
- इनपुट: 2000 वर्ण
- अवधि (स्ट्रिंग आपरेशन): 27.69 सेकंड
- अवधि (regex संचालन): 41.436 सेकंड
निष्कर्ष: स्ट्रिंग आपरेशन लगभग हमेशा, नियमित अभिव्यक्ति को हरा अगर कुशलता से प्रोग्राम किया जाएगा। लेकिन और अधिक जटिल यह हो जाता है, यह कठिन हो सकता है कि स्ट्रिंग आपरेशन प्रदर्शन के मामलों में न केवल लेकिन यह भी रखरखाव के बारे में रख सकते हैं।
कोड FunctionOne
private void FunctionOne(string input)
{
var matches = new List<string>();
var match = new StringBuilder();
Boolean startRecording = false;
foreach (char c in input)
{
if (c.Equals('<'))
{
startRecording = true;
continue;
}
if (c.Equals('>'))
{
matches.Add(match.ToString());
match = new StringBuilder();
startRecording = false;
}
if (startRecording)
{
match.Append(c);
}
}
}
कोड FunctionTwo
Regex regx = new Regex("<.*?>");
private void FunctionTwo(string input)
{
Match m = regx.Match(input);
var results = new List<string>();
while (m.Success)
{
results.Add(m.Value);
m = m.NextMatch();
}
}
वास्तविक उत्तर यह है कि यह निर्भर करता है कि आप क्या कर रहे हैं, कैसे, और कितनी बार – SLaks
आपका रेगेक्स बेंचमार्क बहुत गलत है; आप हर बार regex फिर से संकलित कर रहे हैं। यदि आप एक उदाहरण का पुन: उपयोग करते हैं, तो यह बहुत तेज हो जाएगा। यदि आप 'RegexOptions.Compiled' पास करते हैं, तो यह और भी तेज़ हो जाएगा। – SLaks
ठीक है धन्यवाद स्लाक्स, मैं यहां अपने नए परिणाम पोस्ट करूंगा। –
स्ट्रिंग आपरेशन हमेशा नियमित अभिव्यक्ति के संचालन की तुलना में तेजी हो जाएगा। बेशक, आप स्ट्रिंग ऑपरेशंस को एक अक्षम तरीके से लिखते हैं।
नियमित अभिव्यक्तियों को पार्स किया जाना चाहिए, और स्ट्रिंग ऑपरेशन का उपयोग करके ऑपरेशन करने के लिए उत्पन्न कोड। सबसे अच्छा, नियमित अभिव्यक्ति ऑपरेशन स्ट्रिंग मैनिप्लेशंस करने के लिए इष्टतम क्या कर सकता है।
नियमित अभिव्यक्तियों का उपयोग नहीं किया जाता है क्योंकि वे सादे स्ट्रिंग ऑपरेशंस की तुलना में कुछ भी तेज़ कर सकते हैं, इसका उपयोग किया जाता है क्योंकि यह छोटे कोड के साथ बहुत जटिल परिचालन कर सकता है, उचित रूप से छोटे ओवरहेड के साथ।
मैं एक समय पहले सी # में कुछ रूपरेखा किया था, निम्नलिखित की तुलना:
1) वस्तुओं के लिए LINQ।
2) लैम्ब्डा अभिव्यक्तियां।
3) पारंपरिक पुनरावृत्ति विधि।
सभी 3 तरीकों का नियमित अभिव्यक्तियों के साथ और बिना दोनों परीक्षण किए गए थे। मेरे परीक्षण मामले में निष्कर्ष स्पष्ट था कि बड़ी संख्या में पाठ में तारों की खोज करते समय नियमित अभिव्यक्तियां सभी 3 मामलों में गैर-रेगेक्स की तुलना में काफी धीमी होती हैं।
आप अपने ब्लॉग पर विवरण पढ़ सकते हैं: http://www.midniteblog.com/?p=72
- 1. रेगेक्स, स्ट्रिंग
- 2. jQuery क्या तेज़ है: चयनकर्ता या विधियां?
- 3. तेज़ क्या है: कई ifs, या अन्यथा?
- 4. तेज़ क्या है? File_exist या MySQL क्वेरी?
- 5. रेगेक्स स्ट्रिंग
- 6. रेगेक्स स्ट्रिंग लम्बाई
- 7. रूबी स्ट्रिंग सर्च: जो तेजी से विभाजित या रेगेक्स है?
- 8. सी ++ 11 रेगेक्स: स्ट्रिंग
- 9. रेगेक्स केवल स्ट्रिंग
- 10. आर रेगेक्स/जीएसयूबी: स्ट्रिंग
- 11. रेगेक्स बनाम मैनुअल तुलना। कौन सा तेज़ है?
- 12. स्ट्रिंग.जॉइन() बनाम अन्य स्ट्रिंग कॉन्सटेनेशन ऑपरेशंस
- 13. पायथन रेगेक्स स्ट्रिंग मिलान?
- 14. रेगेक्स स्ट्रिंग जावास्क्रिप्ट
- 15. स्ट्रिंग से तेज़। रिप्ले()
- 16. सी # रेगेक्स - एक स्ट्रिंग
- 17. जेएस रेगेक्स: स्ट्रिंग
- 18. जावा रेगेक्स विशिष्ट स्ट्रिंग
- 19. जावा रेगेक्स - स्ट्रिंग
- 20. सी # रेगेक्स - स्ट्रिंग
- 21. .NET स्ट्रिंग ऑपरेशंस केस संवेदनशील हैं?
- 22. रेगेक्स: क्या (?! ...) मतलब है?
- 23. जावा में रेगेक्स स्ट्रिंग "\\ p {Cntrl}" मिलान क्या करता है?
- 24. पायथन रेगेक्स धीमा है जब स्ट्रिंग
- 25. रेगेक्स की आवश्यकता है जो स्ट्रिंग
- 26. रेगेक्स मैच की आवश्यकता है और स्ट्रिंग
- 27. पायथन/रेगेक्स - मैच #, #। स्ट्रिंग में
- 28. रेगेक्स में, स्ट्रिंग के अंत या एक विशिष्ट वर्ण
- 29. ReactJS में तेज़, कच्चे सीएसएस या इनलाइन शैलियों क्या है?
- 30. क्या तेज़ है: पुनः बनाएं या साफ़ करें()?
एक सरल जवाब के साथ सरल सवाल। यदि आप प्रदर्शन को अनुकूलित करना चाहते हैं, तो बेहतर प्रदर्शन करने वाले विकल्प का चयन करें। –