मेरा प्रश्न यह है: सी # सुरक्षित में स्ट्रिंग concatenation है? यदि स्ट्रिंग कॉन्सटेनेशन अप्रत्याशित त्रुटियों की ओर जाता है, और स्ट्रिंगबिल्डर का उपयोग करके उस स्ट्रिंग कॉन्सटेनेशन को प्रतिस्थापित करने से उन त्रुटियों को गायब कर दिया जाता है, तो यह क्या इंगित कर सकता है?स्ट्रिंग कंसटेनेशन सी # में असुरक्षित, स्ट्रिंगबिल्डर का उपयोग करने की आवश्यकता है?
पृष्ठभूमि: मैं एक छोटी कमांड लाइन सी # अनुप्रयोग विकसित कर रहा हूं। यह कमांड लाइन तर्क लेता है, थोड़ा जटिल SQL क्वेरी करता है, और स्वरूपित XML फ़ाइल में डेटा की लगभग 1300 पंक्तियों को आउटपुट करता है।
मेरा प्रारंभिक कार्यक्रम हमेशा डीबग मोड में ठीक चलाएगा। हालांकि, रिलीज मोड में यह 750 वें एसक्यूएल परिणाम के बारे में होगा, और फिर एक त्रुटि के साथ मर जाएगा। त्रुटि यह थी कि डेटा का एक निश्चित स्तंभ पढ़ा नहीं जा सका, यहां तक कि SqlDataReader ऑब्जेक्ट की Read() विधि के माध्यम से भी सच हो गया था।
यह समस्या कोड में सभी परिचालनों के लिए स्ट्रिंगबिल्डर का उपयोग करके तय की गई थी, जहां पहले "string1 + string2" था। मैं SQL क्वेरी लूप के अंदर स्ट्रिंग कॉन्सटेनेशन के बारे में बात नहीं कर रहा हूं, जहां स्ट्रिंगबिल्डर पहले से ही उपयोग में था। मैं कोड में पहले दो या तीन शॉर्ट स्ट्रिंग चर के बीच सरल concatenations के बारे में बात कर रहा हूँ।
मुझे यह धारणा थी कि सी # कुछ तारों को एक साथ जोड़ने के लिए स्मृति प्रबंधन को संभालने के लिए काफी स्मार्ट था। क्या मै गलत हु? या क्या यह किसी अन्य प्रकार की कोड समस्या का संकेत देता है?
क्या आप स्ट्रिंगबिल्डर संस्करण बनाम स्ट्रिंग कॉन्सटेनेशन के साथ कोड के टुकड़े में पेस्ट कर सकते हैं? एकमात्र कारण मुझे लगता है कि आपको स्ट्रिंग कॉन्सटेनेशन बनाम स्ट्रिंगबिल्डर के साथ एक अंतर हो सकता है जिसमें कुछ चीजों का अधिभार कहा जाता है, लेकिन इसका कोई प्रभाव नहीं होना चाहिए जैसा कि आप वर्णन कर रहे हैं। –
मूल कोड: स्ट्रिंग filepath = पथ + fileroot + ".xml"; अपडेटेड कोड: स्ट्रिंग फ़ाइलपैथ = नया स्ट्रिंगबिल्डर (पथ) .एपेंड (फाइलरूट) .एपेंड ("। Xml")। ToString(); मैंने कई स्थानों पर इस तरह के बदलाव किए। ये मुख्य लूप से पहले हैं। मुख्य पाश के अंदर, मैं हमेशा XML फ़ाइल सामग्री बनाने के लिए स्ट्रिंगबिल्डर का उपयोग कर रहा हूं। (मैं एक्सएमएल एपीआई का उपयोग नहीं कर रहा हूं क्योंकि यह तेज़ था, और यह सिर्फ एक त्वरित और गंदा कार्यक्रम होना चाहिए।) –