c# - why this simple linq query takes so much time? -


मेरे पास यह linq क्वेरी है:

  सार्वजनिक स्थिर बैनर getSideBarBanner () {DataClassesDataContext db = नया डेटाक्लास डेटाटाउनटेक्स्ट (); Var bannerSiderBar = (db.Banners में जहां b.Position.Equals (EBannersPosition.siderbar.ToString ()) और amp; बी .Visible == सच चुनें ख) .FirstOrDefault (); वापसी बैनर सिडरबार; }   

ठीक है, मैं आवेदन को प्रोफाइल के लिए dotTrace का उपयोग करता हूं और मुझे लगता है कि क्वेरी निष्पादन में बहुत समय लगता है (2 से अधिक)

 यहाँ छवि विवरण दर्ज करें

मैं बस सोच रहा हूँ, क्यों इतना समय, खासकर जब मेरे बैनर टेबल में लगभग 30 रिकॉर्ड हैं!

UPDATE : बैनर की तालिका स्कीमा:

 यहाँ छवि विवरण दर्ज करें

2 अद्यतन: यदि मैं linq के बजाय सरल एसक्यूएल कनेक्शन का उपयोग करता हूँ, क्वेरी निष्पादन को 700ms जो एक बहुत बड़ा सुधार है ... <पूर्व> सार्वजनिक स्थिर बैनर getSideBarBanner () {बैनर बैनरफाउंड = नया बैनर (); SqlConnection myConnection = नया SqlConnection (कॉन्फ़िगरेशन प्रबंधक.कनेक्शन स्ट्रिंग्स ["Library_prodConnectionString"]। ConnectionString); कोशिश {myConnection.Open (); SqlCommand myCommand = नया SqlCommand ("का चयन पथ, बैनर ख से लिंक b.Wposition = @ स्थिति और बी। योग्य = 1", myConnection); MyCommand.Parameters.Add (नया SqlParameter ("@ स्थिति", EBannersPosition.siderbar.ToString ())); SqlDataReader myReader = myCommand.ExecuteReader (); जबकि (myReader.Read ()) {यदि (myReader ["पथ"] = नल) bannerFound.Path = myReader ["पथ"]। ToString (); अगर (myReader ["लिंक"]! = नल) बैनर फल। लिंक = myReader ["लिंक"]। ToString (); } MyConnection.Close (); } पकड़ (अपवाद ई) {CreateLogFiles त्रुटि = नया CreateLogFiles (); Err.ErrorLog (HttpContext.Current.Server.MapPath ("~ / साइट / लॉग / त्रुटि लॉग"), ई। टॉस्ट्रिंग ()); } वापसी बैनरफाउंड; }

यह मुझे बताता है कि लिनक्स क्वेरी का एसक्यूएल का अनुवाद बहुत खराब प्रदर्शन है ... आपको क्या लगता है?

आपको परीक्षण को हथियाने पर विचार करना चाहिए (यदि आप LINQ से SQL का उपयोग कर रहे हैं) या (यदि आप एंटीटी फ़्रेमवर्क का उपयोग कर रहे हैं) और इसका उपयोग करके पता लगाने के लिए कि SQL क्या है आपकी क्वेरी जनरेट कर रही है।

वे दोनों 30 दिनों के लिए नि: शुल्क हैं, जो मुझे आशा है कि इस समस्या को समझने के लिए बहुत सारे दिन होंगे। ;)

एक और संभावना, टिप्पणी में रॉबर्ट ने बताया, सेट करने के लिए है, जो उत्पन्न एसक्यूएल को जहाँ भी आप चाहते हैं।

आप केवल एसक्यूएल का उपयोग कर सकते हैं सर्वर प्रोफाइलर, जो संभवत: आपके ज़रूरत से बहुत अधिक प्रदर्शित करेगा, लेकिन हे, शायद यह अभी भी काम हो जाएगा।

Comments