अपने "सबसे पहले भागो" परिदृश्य है आम तौर पर एक स्थिर आरंभीकरण के DbContext. यह है जहाँ DbContext बाहर काम करता है, इसकी मैपिंग के लिए पहली बार घटित होगा जब पहली क्वेरी निष्पादित होता है । ठेठ दृष्टिकोण से बचने के लिए होने वाली इस के लिए एक उपयोगकर्ता के लिए है एक सरल "गर्म" क्वेरी चलाता है कि जब सेवा शुरू होता है.. उदाहरण के लिए, के बाद अपने सेवा initializes, सीधे शब्दों में कहें, निम्नलिखित की तरह कुछ:
// Warm up the DbContext
using (var context = new AppDbContext())
{
var hasUser = context.Users.Any();
}
यह भी रूप में कार्य करता है एक त्वरित स्टार्ट-अप की जाँच करें कि डेटाबेस पहुँच से बाहर है और प्रतिसाद दे रहा है । क्वेरी खुद करना होगा एक बहुत ही त्वरित आपरेशन, लेकिन DbContext हल करेंगे इसकी मैपिंग इस समय तो किसी भी हाल में उत्पन्न DbContext उदाहरणों का जवाब देंगे वसूल किए बिना लागत कि के दौरान एक अनुरोध है.
के लिए के रूप में कच्चे प्रदर्शन, अगर यह नहीं है कि एक प्रश्न लेने की उम्मीद है, जबकि एक टाई और एक अनुरोध है, नहीं यह async
. अतुल्यकालिक अनुरोध कर रहे हैं नहीं तेजी से, वे कर रहे हैं वास्तव में थोड़ा धीमी है. का उपयोग कर async
अनुरोधों के खिलाफ DbContext के बारे में है यह सुनिश्चित करने के अपने वेब सर्वर / आवेदन धागा उत्तरदायी है, जबकि संभावित महंगा डेटाबेस के संचालन कर रहे हैं प्रसंस्करण. यदि आप चाहते हैं एक प्रतिक्रिया के रूप में जल्दी संभव के रूप में, का उपयोग एक तुल्यकालिक कॉल.
अगले, सुनिश्चित करें कि किसी भी क्षेत्र में आप कर रहे हैं छानने के खिलाफ, इस मामले में, मुद्रा अनुक्रमित रहे हैं. होने के एक क्षेत्र कहा जाता है मुद्रा में अपनी इकाई के रूप में एक स्ट्रिंग के बजाय एक CurrencyId FK (int
) की ओर इशारा करते के लिए एक मुद्रा का रिकॉर्ड पहले से ही एक अतिरिक्त अनुक्रमण के खर्च के रूप में अनुक्रमित पूर्णांकों पर छोटे होते हैं/तेजी से उन पर तार.
आप भी करने की जरूरत नहीं है के साथ परेशान AsNoTracking
जब का उपयोग कर एक Count
क्वेरी. AsNoTracking
पूरी तरह से लागू होता है जब आप लौट रहे हैं संस्थाओं (ToList
/ToArray
/Single
/First
आदि.) करने के लिए होने से बचने के DbContext पर पकड़ के लिए एक संदर्भ लौटे इकाई है । जब आप का उपयोग Count
/Any
या प्रक्षेपण के लिए लौटने से गुण संस्थाओं का उपयोग कर Select
वहाँ है कोई इकाई नहीं लौटे ट्रैक करने के लिए.
यह भी विचार विलंबता नेटवर्क के बीच कहाँ अपने आवेदन कोड चल रहा है और डेटाबेस सर्वर. वे कर रहे हैं एक ही मशीन या वहाँ एक नेटवर्क कनेक्शन खेलने में? कैसे करता है यह तुलना जब आप प्रदर्शन कर रहे हैं एक SSMS क्वेरी? का उपयोग कर एक profiler आप देख सकते हैं क्या SQL एफई वास्तव में भेजने के लिए डेटाबेस । बाकी सब के संदर्भ में समय की लागत है: हो रही करने के लिए अनुरोध DB हो रही है, जिसके परिणामस्वरूप डेटा वापस निवेदक के लिए, पार्स है कि प्रतिक्रिया है । (यदि मामले में आप कर रहे हैं जहां लौटने संस्थाओं के आवंटन,, populating, जाँच खिलाफ मौजूदा संदर्भ, आदि... के मामले में मायने रखता है आदि । जाँच के मौजूदा संदर्भ)
अन्त में, सुनिश्चित करने के लिए कर रहे हैं और चोटी के प्रदर्शन, सुनिश्चित करें कि आपके DbContexts जन्मों रखा जाता है । यदि एक DbContext को खुला रखा जाता है और किया गया है की संख्या पर नज़र रखने के प्रश्नों के खिलाफ चलाने में (का चयन संस्थाओं के बिना AsNoTracking
) उन पर नज़र रखी इकाई के संदर्भ में जमा कर सकते हैं और एक नकारात्मक प्रदर्शन प्रभाव पर भविष्य के प्रश्नों, यहां तक कि अगर आप का उपयोग AsNoTracking
के रूप में एफई लग रहा है की जाँच करने के लिए के माध्यम से यह पता लगाया संदर्भ के लिए है कि संस्थाओं पर लागू हो सकती/संबंधित करने के लिए अपने नए प्रश्नों. कई बार मैं देख रहा हूँ डेवलपर्स मान DbContexts कर रहे हैं "महंगा" तो वे चुनते इन्स्तांत के लिए उन्हें के रूप में छोटे रूप में संभव से बचने के लिए उन लागत, केवल अंत करने के लिए बनाने के संचालन और अधिक महंगी समय के साथ ।
सभी के साथ कि माना जाता है, एफई होना कभी नहीं होगा के रूप में उपवास के रूप में कच्चे SQL. यह एक ORM प्रदान करने के लिए डिजाइन के लिए सुविधा .नेट अनुप्रयोगों के लिए जब यह आता है काम करने के लिए डेटा के साथ. है कि सुविधा के साथ काम करने में इकाई वर्गों के बजाय sanitizing और अपने खुद के लेखन के कच्चे SQL हर समय लागत के साथ आता है.