मैं एक सी # एप्लिकेशन लिख रहा हूं जो कई नियमित अभिव्यक्तियों (~ 10) को तारों (~ 25 मिलियन) तारों पर चलाता है। मैंने इसे Google पर करने का प्रयास किया था, लेकिन "धीमा" के साथ रेगेक्स के लिए कोई भी खोज ट्यूटोरियल से भरी हुई है कि कैसे बैकफ्रेंसिंग इत्यादि रेगेक्स को धीमा कर देती है। मुझे लगता है कि यह मेरी समस्या नहीं है क्योंकि मेरे regexes तेजी से शुरू और धीमा हो जाता है।regex प्रदर्शन
पहले लाख या तो तारों के लिए नियमित अभिव्यक्तियों को चलाने के लिए प्रति 1000 तारों में लगभग 60ms लगते हैं। अंत में, यह उस बिंदु तक धीमा हो गया है जहां इसकी 600 मिलीमीटर लग रही है। क्या किसी को पता है क्यों?
यह बदतर था, लेकिन मैंने कैश किए गए संस्करण के बजाय RegEx
के उदाहरणों का उपयोग करके और अभिव्यक्तियों को संकलित करके इसे बेहतर बना दिया।
मेरे कुछ regexes को अलग-अलग होना आवश्यक है उदा। उपयोगकर्ता का नाम के आधार पर यह हो सकता है mike said (\w*)
या john said (\w*)
मेरे समझ है कि यह संभव उन regexes संकलन और मानकों में पारित करने के लिए नहीं है (उदाहरण, saidRegex.Match(inputString, userName)
)।
क्या किसी के पास कोई सुझाव है?
-
क्या आप कुछ कोड पोस्ट कर सकते हैं? –
यदि आप प्रदर्शन में सुधार के लिए सामान्य उपाय किए हैं तो अधिक सलाह देना बहुत मुश्किल है। यदि यह ठीक है, तो क्या आप अपना रेगेक्स दिखा सकते हैं? – nhahtdh
यह असंभव है कि रेगेक्स इंजन स्वयं धीमा हो रहा है। अधिक संभावना है कि आपका एप्लिकेशन परिणाम सहेज रहा है, इसलिए स्मृति बढ़ रही है, और यह समग्र प्रदर्शन को कम करने का कारण बन रहा है। अपनी प्रक्रिया मेमोरी आकार की निगरानी करें। मेमोरी लीक के लिए भी जाँच करें। – Barmar