में तारों में वर्ण प्रतिस्थापन मैं स्ट्रिंग में वर्णों को कितनी तेज़ी से बदल सकता हूं?वीबीएनईटी
तो इस प्रश्न पर पृष्ठभूमि यह है: हम अनुप्रयोगों है कि एक दूसरे के साथ और सॉकेट के माध्यम से ग्राहकों की अनुप्रयोगों के साथ संवाद की एक जोड़ी है। इन सॉकेट संदेशों में गैर-प्रिंट करने योग्य वर्ण होते हैं (उदाहरण के लिए chr (0)) जिन्हें पूर्व निर्धारित स्ट्रिंग (जैसे "{Nul}"} से प्रतिस्थापित करने की आवश्यकता होती है, क्योंकि सॉकेट संदेश लॉग फ़ाइल में रखे जाते हैं। एक तरफ नोट पर, नहीं हर लॉग संदेश पात्रों की जगह है करने के लिए वर्तमान पद्धति हम इस्तेमाल किया ... पर की आवश्यकता होगी।
अब मैं this MSDN link जो मैं इस साइट से एक अलग पोस्ट से मिला से इस छोटे से साहसिक पढ़ने पर शुरू कर दिया।
दिन की शुरुआत ... जैसे सभी संभव प्रतिस्थापन के लिए जाँच करने के लिए StringBuilder उपयोग कर रहा था ...
Public Function ReplaceSB(ByVal p_Message As String) As String
Dim sb As New System.Text.StringBuilder(p_Message)
sb.Replace(Chr(0), "{NUL}")
sb.Replace(Chr(1), "{SOH}")
Return sb.ToString
End Function
अब ब्लॉग पोस्ट स्ट्रिंगबिल्डर को छोड़कर स्ट्रिंग.रेप्लेस का उपयोग करके इंगित करता है कि तेजी से परिणाम मिलते हैं। (वास्तव में, StringBuilder का उपयोग कर दिन भर ऐसा करने का सबसे धीमी तरीका था।)
p_Message = p_Message.Replace(Chr(0), "{NUL}")
p_Message = p_Message.Replace(Chr(1), "{SOH}")
यह जानते हुए कि नहीं हर संदेश इस प्रक्रिया को मैंने सोचा कि यह नहीं करने के लिए समय की बचत होगी उन संदेशों को संसाधित करने के लिए के माध्यम से जाने की जरूरत है कि बाहर छोड़ा जा सकता है। इसलिए नियमित अभिव्यक्तियों का उपयोग करके मैंने पहली बार स्ट्रिंग की खोज की और फिर निर्धारित किया कि इसे संसाधित करने की आवश्यकता है या नहीं। यह string.replace का उपयोग करने के समान था, मूल रूप से सभी तारों को संसाधित करने के समय को बचाने से धोना, लेकिन नियमित अभिव्यक्तियों के साथ उन सभी को जांचने से समय खोना।
तो यह कुछ सरणियों कि पुराने और नए के साथ अपने अनुक्रमित मिलान और का उपयोग करें कि संदेश संसाधित करने का उपयोग कर की कोशिश करने का सुझाव दिया गया था। तो यह कुछ इस तरह होगा ...
Private chrArray() As Char = {Chr(0), Chr(1)}
Private strArray() As String = {"{NUL}", "{SOH}"}
Public Function TestReplace(ByVal p_Message As String) As String
Dim i As Integer
For i = 0 To ((chrArray.Length) - 1)
If p_Message.Contains(chrArray(i).ToString) Then
p_Message = p_Message.Replace(chrArray(i), strArray(i))
End If
Next
Return p_Message
End Function
यह अब तक का सबसे तेज़ तरीका मैं इन संदेशों को संसाधित करने के लिए मिल गया है किया गया है। मैंने इस बारे में जाने के कई अन्य तरीकों की कोशिश की है, साथ ही आने वाली स्ट्रिंग को एक वर्ण सरणी में परिवर्तित करना और साथ ही साथ chrArray की बजाय स्ट्रिंग के माध्यम से लूप करने की कोशिश कर रहा है।
तो मेरा प्रश्न यह है कि: क्या मैं इसे अभी तक तेज कर सकता हूं? मैं क्या खो रहा हूँ?
आप सी # उपयोग करने का विकल्प है, तो आप असुरक्षित कोड के साथ एक बुराई तेजी से समारोह में लिखने के लिए सक्षम हो सकता है। – Juliet
मुझे आश्चर्य हुआ कि क्या यह संभव होगा, लेकिन जल्द ही उस विकल्प को गिनती है क्योंकि मुझे पैरामीटर के साथ काम करने के लिए दिया गया था ... ओह अच्छी तरह से – Tim