2009-11-05 16 views
6

क्या संकलक सुंदर स्वरूपित तारों को अनुकूलित करेगा, या वह कोड स्ट्रिंग्स से धीमा गति से चलाएगा जो एक पठनीय तरीके से विभाजित नहीं हैं?.NET कोड, प्रदर्शन में सुंदर प्रारूप एसक्यूएल?

उदाहरण के लिए

string sql = 
    "select * " + 
    "from person " + 
    "where id = :id"; 

या

string sql = "select * from person where id = :id"; 

यह सिर्फ एक छोटा सा उदाहरण है। आप जानते हैं कि एसक्यूएल कितना जटिल हो सकता है।

+3

जब आप प्रोग्राम को संकलित करते हैं तो संकलक निस्संदेह स्ट्रिंग को अनुकूलित करेगा ताकि निष्पादित कोड में बराबर होगा। – Lazarus

+2

आप उत्तर के रूप में उत्तर सबमिट क्यों कर रहे हैं? –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/627643/sql-formatting-tool –

उत्तर

13

बस का उपयोग करें: -

string sql = 
    @"select * 
    from person 
    where id = :id"; 

यह दृश्य एक पंक्ति समाधान के समान की compilers बिंदु से है। हालांकि मैं कंपाइलर द्वारा अनुकूलित किए गए शाब्दिक तारों के संयोजन को देखकर आश्चर्यचकित नहीं होगा। हालांकि कॉन्सटेनेशन दृष्टिकोण के साथ आम गोचा स्ट्रिंग के अंत में व्हाइटस्पेस को शामिल करना भूल रहा है।

+1

"@" उपयोग के बारे में शानदार युक्ति। मैंने कई अन्य "स्ट्रिंग चीजों" के लिए एम्परसैंड का उपयोग किया है, लेकिन कभी नहीं पता था कि यह बहु लाइन सामान के लिए काम करता है! – kaze

+1

ध्यान रखें कि दिखाए गए "@" वाक्यविन्यास के साथ आप मूल की तुलना में एक अलग स्ट्रिंग के साथ समाप्त हो जाएंगे: कैरिज रिटर्न, लाइनफ़ीड्स और अतिरिक्त व्हाइटस्पेस सभी शामिल किए जाएंगे। तो आपकी स्ट्रिंग "\ * \ r \ n व्यक्ति से \ n \ n जहां id =: id" होगी। इस मामले में इससे कोई फर्क नहीं पड़ता, लेकिन कुछ मामलों में अंतर महत्वपूर्ण है। –

+0

स्टैक ओवरव्लो ने मेरी पिछली टिप्पणी से अतिरिक्त व्हाइटस्पेस हटा दिया। प्रत्येक "\ r \ n" के बाद पांच रिक्त स्थान होना चाहिए। –

7

आप उपयोग कर सकते हैं

string s = @"SELECT * 
FROM person 
WHERE id = :id"; 
+0

+1 बाद की रेखाओं को इंडेंट करने के बजाय स्ट्रिंग "स्टिक" को बाईं ओर देने के लिए +1। – Kleinux

6

स्ट्रिंग स्थिरांक संकलन समय पर मुड़ा कर रहे हैं ताकि दो कोड के टुकड़े ऊपर अनिवार्य रूप से समान हैं। सी # के शाश्वत verities में से एक -

यह एक अच्छा विचार है या नहीं इनलाइन एसक्यूएल स्ट्रिंग के लिए एक और बात पूरी तरह

+0

सच है, मेरे मामले में, मेरे पास अक्सर कोई choise नहीं है लेकिन इनलाइन एसक्यूएल का उपयोग करने के लिए, इसलिए मैं बस स्थिति का सर्वोत्तम बनाना चाहता हूं। – kaze

+0

+1 "folded" – Dan

6

आह है ...। कौन सा बेहतर है, कोड जो + या कोड का उपयोग कर तारों को जोड़ता है जो नहीं करता है? आपके मामले में, उत्तर इस बात पर निर्भर करता है कि आप .NET1 का उपयोग कर रहे .NET1 का कौन सा संस्करण केवल एक कथन में + स्ट्रिंग को अनुकूलित कर सकते हैं। एक स्ट्रिंग में बहुत अधिक + के परिणामस्वरूप गरीब प्रदर्शन हुआ क्योंकि संकलक को अतिरिक्त स्ट्रिंग भागों से निपटने के लिए नए स्ट्रिंग उदाहरण बनाने का सहारा लेना पड़ा। .NET 2 से, आर्किटेक्चर थोड़ा बदल गया, और एकाधिक + कथन संकलक द्वारा काफी सहजता से संयोजित किए जाते हैं।

+2

के लिए धन्यवाद डाउनवोट के लिए धन्यवाद - जो भी इसे करता है। कृपया बताएं कि आपको क्यों लगता है कि यह जवाब गलत है, इसलिए हर कोई इससे सीख सकता है। –

10

तुम एक साधारण प्रोग्राम के साथ इस परीक्षण कर सकते हैं:

Console.WriteLine("a" + "b"); 

reflector का उपयोग करना, आप आसानी से जिसके परिणामस्वरूप द्विआधारी एकत्रित न कर सकते हैं। रिलीज मोड में, आईएल यह उत्पन्न करता है:

L_0000: ldstr "ab" 
L_0005: call void [mscorlib]System.Console::WriteLine(string) 

तो .NET "सुंदर स्वरूपित स्ट्रिंग" को अनुकूलित करता है।

+0

ग्रेट उत्तर :) –

संबंधित मुद्दे