एंटिटी फ्रेमवर्क बहुत धीमा है। मेरे विकल्प क्या हैं? [बन्द है]


93

मैंने "डोन्ट ऑप्टिमाइज़ प्रीमीयरली" मंत्र का अनुसरण किया है और एंटिटी फ्रेमवर्क का उपयोग करके मेरी WCF सेवा को कोडित किया है।

हालांकि, मैंने प्रदर्शन को बेहतर बनाया और एंटिटी फ्रेमवर्क बहुत धीमा है। (मेरा ऐप लगभग 1.2 सेकंड में 2 संदेशों को संसाधित करता है, जहां मैं (विरासत) ऐप है कि मैं एक ही समय में 5-6 संदेश लिखता हूं। (विरासत ऐप अपने DB एक्सेस के लिए स्पार्क्स कहता है।)

प्रति संदेश समय के थोक लेने के लिए मेरा रूपरेखा एंटिटी फ्रेमवर्क को इंगित करता है।

तो मेरे विकल्प क्या है?

  • क्या वहां बेहतर ORM हैं?
    (कुछ ऐसा जो वस्तुओं के सामान्य पढ़ने और लिखने का समर्थन करता है और इसे तेजी से करता है ..)

  • क्या एंटिटी फ्रेमवर्क को तेज बनाने का एक तरीका है?
    ( नोट : जब मैं तेजी से कहता हूं कि मेरा मतलब लंबे समय से है, पहली कॉल नहीं। (पहला कॉल धीमा है (एक संदेश के लिए 15 सेकंड), लेकिन यह कोई समस्या नहीं है। मुझे बस इसे बाकी के लिए तेज करने की आवश्यकता है। संदेशों का।)

  • कुछ रहस्यमय 3 विकल्प जो मुझे मेरी सेवा से अधिक गति प्राप्त करने में मदद करेंगे।

नोट: मेरे अधिकांश DB इंटरैक्शन क्रिएट और अपडेट हैं। मैं बहुत कम चयन और विलोपन करता हूं।


ऐसा लगता है कि 'linq is slow' की रिहाइश कैसी है, आप कैसे जानते हैं कि यह EF है? क्या आपने अपने सभी परिवर्तनों को बदल दिया है?
मेस

6
कुछ उत्तर प्रश्नों की ओर इशारा कर रहे हैं। मेरे अनुभव में, EF में सुस्ती का प्रश्नों से बहुत कम लेना-देना है, लेकिन इसके बजाय भौतिकता की लागतों के साथ, और उन लागतों को अक्सर ट्रैकिंग को बदलने के लिए बांधा जाता है और जो कि बनाए गए उदाहरण (उदाहरणों) को प्रभावित करता है। दुर्भाग्य से, मेरे पास आपके लिए एक चांदी की गोली नहीं है, इसलिए यह केवल एक टिप्पणी है, लेकिन मैं यह देखने की सलाह दूंगा कि क्या रूपरेखा उच्च भौतिकता लागत का खुलासा करती है और यदि हां, तो अनुसंधान ने कहा कि लागतों के बारे में क्या किया जा सकता है।
एंथनी Pegram

@ मेस - मुझे लगा कि मैंने संकेत दिया है कि मैंने प्रोफाइल किया था और पाया कि यह ईएफ / डीबी था जो धीमा था। किसी भी तरह, हां मैंने किया। मैंने इसे प्रोफाइल किया और यह ईएफ / डीबी इंटरैक्शन है जो प्रमुख अपराधी हैं।
20

@ एंथनी - क्या भौतिकता पहले चीजों की तरह नहीं चलती है? यदि हां, तो आप सही हैं कि यह बहुत धीमा है। पहला रन सुपर स्लो है। लेकिन जैसा कि मैंने संकेत किया है, मैं इसके बारे में बहुत चिंतित नहीं हूं। यह समस्या है कि कुल थ्रूपुट है। (यदि ऐसा नहीं है तो भौतिकता क्या है, तो मुझे यह देखने के लिए कुछ शोध करने की आवश्यकता है कि क्या यह मेरे मुद्दे का कारण है)
Vaccano

1
@Vaccano, नहीं, भौतिककरण डेटाबेस से डेटा लेने और उस डेटा का प्रतिनिधित्व करने के लिए वस्तुओं के ग्राफ को तत्काल और पॉप्युलेट करने की प्रक्रिया है। मैं पहले रन के प्रदर्शन के बारे में बात नहीं कर रहा हूं क्योंकि कोड को jitted (या यहां तक ​​कि एसक्यूएल सर्वर क्वेरी निष्पादन योजना बना सकता है), लेकिन हर बार जब आप वस्तुओं के रूप में डेटा प्राप्त करते हैं तो क्या होता है।
एंथनी पेग्राम

जवाबों:


46

आपको वास्तव में इकाई फ्रेमवर्क द्वारा जारी किए गए एसक्यूएल कमांड को प्रोफाइल करके शुरू करना चाहिए। आपके कॉन्फ़िगरेशन (POCO, सेल्फ-ट्रैकिंग इकाइयां) के आधार पर अनुकूलन के लिए बहुत जगह है। आप ObjectSet<T>.ToTraceString()विधि का उपयोग करके SQL कमांड (जो डिबग और रिलीज़ मोड के बीच भिन्न नहीं होना चाहिए) को डिबग कर सकते हैं । यदि आपको ऐसी क्वेरी का सामना करना पड़ता है जिसके लिए आपको और अधिक अनुकूलन की आवश्यकता होती है, तो आप कुछ अनुमानों का उपयोग करके EF को अधिक जानकारी दे सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं।

उदाहरण:

Product product = db.Products.SingleOrDefault(p => p.Id == 10);
// executes SELECT * FROM Products WHERE Id = 10

ProductDto dto = new ProductDto();
foreach (Category category in product.Categories)
// executes SELECT * FROM Categories WHERE ProductId = 10
{
    dto.Categories.Add(new CategoryDto { Name = category.Name });
}

के साथ प्रतिस्थापित किया जा सकता है:

var query = from p in db.Products
            where p.Id == 10
            select new
            {
                p.Name,
                Categories = from c in p.Categories select c.Name
            };
ProductDto dto = new ProductDto();
foreach (var categoryName in query.Single().Categories)
// Executes SELECT p.Id, c.Name FROM Products as p, Categories as c WHERE p.Id = 10 AND p.Id = c.ProductId
{
    dto.Categories.Add(new CategoryDto { Name = categoryName });
}

मैंने बस अपने सिर के बाहर टाइप किया है, इसलिए यह बिल्कुल ऐसा नहीं है कि इसे कैसे निष्पादित किया जाएगा, लेकिन ईएफ वास्तव में कुछ अच्छी अनुकूलन करता है यदि आप इसे सब कुछ बताते हैं जो आप क्वेरी के बारे में जानते हैं (इस मामले में, कि हमें श्रेणी की आवश्यकता होगी- नाम नहीं)। लेकिन यह उत्सुक-लोडिंग (db.Products.Include ("श्रेणियाँ")) की तरह नहीं है क्योंकि अनुमान आगे डेटा लोड करने की मात्रा को कम कर सकते हैं।


40
यह प्रतिक्रिया तब तक उचित लगती है, जब तक आपको एहसास नहीं होता है कि अनाम प्रकार उस पद्धति के बाहर सुलभ नहीं हैं जिसमें वे परिभाषित हैं। यदि आप एक जटिल वस्तु को लोड करना चाहते हैं और मेगामॉथ नहीं लिखना चाहते हैं, तो आपको अपने नए गुमनाम प्रकारों को किसी प्रकार के पोको में शामिल करने की आवश्यकता है। फिर से, यह लगभग उचित लगता है जब तक आपको यह महसूस नहीं होता है कि ऐसा करने में आपको अनिवार्य रूप से अपना खुद का पता लगाना है। जो बकवास है।
डग

5
इसके परिणामस्वरूप मेरे लिए गति में 15x-20x की वृद्धि हुई।
डेव कजिनो

11
दिलचस्प और उपयोगी जवाब, अभी भी काफी समय बाद मान्य। @ डग: जो वास्तव में बकवास नहीं है क्योंकि आप केवल अनुमानों का उपयोग करते हैं (उन अनुमानों का उपयोग करके) जहां आपको वास्तव में अतिरिक्त लाभ का उपयोग करने की आवश्यकता होती है। EF और POCO आपको उचित डिफ़ॉल्ट देता है, जो बहुत अच्छा है!
विक्टर

2
@Doug अधिकांश अनुप्रयोगों में केवल-दृश्य परिदृश्यों के लिए दृश्य मॉडल होते हैं, है ना? हो सकता है कि आप जितना डेटा बाहर निकालते हैं उतना ही मैपिंग भी करें।
केसी

4
मैं महसूस करता हूं कि ओआरएम भविष्य था। वे सिर्फ समझ में आए, जब तक मैंने उनका उपयोग शुरू नहीं किया। तब मुझे डैपर मिला । अब, जब इस तरह के समाधानों को देखते हुए, मैं यह सोचता हूं कि जटिलता जल्दी कैसे बढ़ती है। C # में अमूर्त एसक्यूएल लिखना जीवन से गुजरने का कोई तरीका नहीं है।
माइकल सिल्वर

80

इस तथ्य का तथ्य यह है कि एंटिटी फ्रेमवर्क जैसे उत्पाद हमेशा धीमी और अक्षम होंगे, क्योंकि वे बहुत अधिक कोड निष्पादित कर रहे हैं।

मुझे यह भी मूर्खतापूर्ण लगता है कि लोग सुझाव दे रहे हैं कि किसी को LINQ प्रश्नों को ऑप्टिमाइज़ करना चाहिए, SQL उत्पन्न को देखना चाहिए, डीबगर्स का उपयोग करना चाहिए, पूर्व-संकलन करना चाहिए, कई अतिरिक्त कदम उठाने चाहिए, आदि। बहुत समय बर्बाद करना। कोई नहीं कहता - सरलीकृत करो! हर कोई चीजों को और अधिक कदम (समय बर्बाद करना) करके आगे बढ़ना चाहता है।

एक सामान्य ज्ञान दृष्टिकोण EF या LINQ का उपयोग नहीं करना होगा। सादे SQL का उपयोग करें। इसमें कुछ भी गलत नहीं है। सिर्फ इसलिए कि प्रोग्रामर्स के बीच झुंड की मानसिकता है और वे महसूस करते हैं कि हर एक नए उत्पाद का उपयोग वहां से किया जाता है, इसका मतलब यह नहीं है कि यह अच्छा है या यह काम करेगा। अधिकांश प्रोग्रामर सोचते हैं कि यदि वे एक बड़ी कंपनी द्वारा जारी किए गए हर नए कोड को शामिल करते हैं, तो यह उन्हें एक स्मार्ट प्रोग्रामर बना रहा है; सच नहीं है। स्मार्ट प्रोग्रामिंग ज्यादातर कम सिरदर्द, अनिश्चितताओं और कम से कम समय के साथ अधिक करने के तरीके के बारे में है। समय याद रखें! यह सबसे महत्वपूर्ण तत्व है, इसलिए इसे कुछ अजीब तथाकथित 'पैटर्न' के अनुरूप करने के लिए लिखे गए बुरे / फटे हुए कोड में समस्याओं को हल करने में बर्बाद न करने के तरीके खोजने की कोशिश करें।

आराम करें, जीवन का आनंद लें, कोडिंग से एक ब्रेक लें और अतिरिक्त सुविधाओं, कोड, उत्पादों, 'पैटर्न' का उपयोग करना बंद करें। जीवन छोटा है और आपके कोड का जीवन और भी छोटा है, और यह निश्चित रूप से रॉकेट साइंस नहीं है। LINQ, EF और अन्य जैसे लेयर्स को हटाएं, और आपका कोड कुशलतापूर्वक चलेगा, स्केल करेगा और हां, इसे बनाए रखना आसान होगा। बहुत ज्यादा अमूर्तता एक बुरा 'पैटर्न' है।

और यही आपकी समस्या का समाधान है।


155
यह बच्चे को स्नान के पानी के साथ बाहर फेंक रहा है। आप बाधाओं को अनुकूलित करते हैं, यह ईएफ को बाहर फेंकने के लिए मूर्खतापूर्ण है क्योंकि यह कुछ स्थानों में बहुत धीमा है, जबकि अधिकांश अन्य में बहुत तेज है। दोनों का उपयोग क्यों नहीं? ईएफ संग्रहीत प्रक्रियाओं और कच्चे एसक्यूएल को ठीक से संभालता है। मैंने सिर्फ एक LINQ-to-SQL क्वेरी को परिवर्तित किया है जिसमें एक SP में 10+ सेकंड लगते हैं जो ~ 1 सेकंड लेता है, लेकिन मैं सभी LINQ-to-SQL को बाहर फेंकने वाला नहीं हूं। इसने अन्य सरल मामलों में बहुत समय बचाया, त्रुटि के लिए कम कोड और कम कमरे के साथ और प्रश्न संकलक सत्यापित हैं और डेटाबेस से मेल खाते हैं। कम कोड आसान रखरखाव और त्रुटियों के लिए कम कमरा है।
जूलियनआर

11
कुल मिलाकर आपकी सलाह हालांकि अच्छी है, लेकिन मुझे नहीं लगता कि ईएफ या अन्य अमूर्तताओं को छोड़ना सही है क्योंकि वे समय का 10% अच्छी तरह से काम नहीं करते हैं।
जूलियनआर

49
सादे SQL = बनाए रखने के लिए आसान है? व्यापार तर्क के बहुत सारे के साथ बहुत बड़े ऐप्स के लिए बस सच नहीं है। जटिल पुन: प्रयोज्य एसक्यूएल लिखना आसान काम नहीं है। व्यक्तिगत रूप से मेरे पास ईएफ के साथ कुछ प्रदर्शन मुद्दे हैं, लेकिन ये समस्याएं बस एक आरएडी के संदर्भ में उचित ओआरएम के लाभों और डीआरवाई (यदि इसमें किसी भी स्तर की जटिलता शामिल है) की तुलना में नहीं है।
12

13
+ 10 ^ 100 बहुत अधिक अमूर्त एक बुरा 'पैटर्न' है
मकाच

57
-1। "EF ALWAYS धीमा और अक्षम होगा।" मैं यह नहीं देखता कि आप पूर्ण सत्य होने के लिए इस तरह से कुछ क्यों कहेंगे। अधिक परतों के माध्यम से जाने से कुछ धीमा हो जाएगा, लेकिन क्या यह अंतर भी ध्यान देने योग्य है, पूरी तरह से डेटा की मात्रा और निष्पादित होने वाले क्वेरी के प्रकार जैसी स्थिति पर निर्भर है। मेरे लिए यह वही है जो यह कह रहा है कि 'C # ALWAYS धीमा और अक्षम होगा' क्योंकि यह C ++ की तुलना में अधिक अमूर्त है। फिर भी बहुत से लोग इसका उपयोग करना पसंद करते हैं क्योंकि उत्पादकता लाभ प्रदर्शन को कम करती है (यदि कोई है)। यही बात EF पर लागू होती है
डेस्परर्ट

37

एक सुझाव केवल एकल-रिकॉर्ड CRUD बयानों के लिए LINQ से एंटिटी फ्रेमवर्क का उपयोग करना है।

अधिक शामिल प्रश्नों, खोजों, रिपोर्टिंग आदि के लिए, एक संग्रहीत कार्यविधि लिखें और MSDN पर वर्णित के रूप में इकाई फ्रेमवर्क मॉडल में जोड़ें

यह वह दृष्टिकोण है जो मैंने अपनी साइटों के एक जोड़े के साथ लिया है और यह उत्पादकता और प्रदर्शन के बीच एक अच्छा समझौता है। इकाई फ्रेमवर्क हमेशा हाथ में कार्य के लिए सबसे कुशल SQL उत्पन्न नहीं करेगा। और यह जानने के लिए समय बिताने के बजाय कि क्यों, अधिक जटिल प्रश्नों के लिए एक संग्रहीत कार्यविधि लिखना वास्तव में मेरे लिए समय बचाता है। एक बार जब आप इस प्रक्रिया से परिचित हो जाते हैं, तो आपके ईएफ मॉडल में संग्रहीत प्रोक्स को जोड़ने के लिए बहुत अधिक परेशानी नहीं होती है। और निश्चित रूप से इसे अपने मॉडल में जोड़ने का लाभ यह है कि आपको ओआरएम का उपयोग करने से प्राप्त होने वाली सभी दृढ़ता से टाइप की गई अच्छाई मिलती है।


क्या आपको db.athlete.find (id) आदि जैसे मचान में उपयोग की जाने वाली विधियों के बारे में पता है कि वे ADO.NET या डैपर की तुलना में कैसे प्रदर्शन करते हैं ??
यह

15

यदि आप विशुद्ध रूप से हैं डेटा प्राप्त , तो यह प्रदर्शन के लिए एक बड़ी मदद है जब आप ईएफ को यह कहते हैं कि वह प्राप्त करने वाली संस्थाओं का ट्रैक न रखें। MergeOption.NoTracking का उपयोग करके ऐसा करें। EF केवल क्वेरी उत्पन्न करेगा, इसे निष्पादित करेगा और वस्तुओं के परिणामों को डिसेर्बलाइज़ करेगा, लेकिन इकाई परिवर्तन या उस प्रकृति की किसी भी चीज़ पर नज़र रखने का प्रयास नहीं करेगा। यदि कोई क्वेरी सरल है (डेटाबेस पर लौटने में अधिक समय व्यतीत नहीं होता है), मैंने पाया है कि इसे NoTracking पर सेट करना क्वेरी के प्रदर्शन को दोगुना कर सकता है।

MergeOption enum पर इस MSDN लेख को देखें:

पहचान संकल्प, राज्य प्रबंधन और परिवर्तन ट्रैकिंग

यह EF प्रदर्शन पर एक अच्छा लेख लगता है:

प्रदर्शन और इकाई ढांचा


9
इससे पहले कि कोई भी ऐसा करता है, यहां पढ़ना एक अच्छा विचार हो सकता है। stackoverflow.com/questions/9259480/…
leen3o

6

आप कहते हैं कि आपने आवेदन को प्रोफाइल कर दिया है। क्या आपने ORM को भी प्रोफाइल किया है? आयेंडे से एक ईएफ प्रोफाइलर है जो हाइलाइट करेगा जहां आप अपने ईएफ कोड को अनुकूलित कर सकते हैं। आप इसे यहां देख सकते हैं:

http://efprof.com/

याद रखें कि यदि आपको प्रदर्शन प्राप्त करने की आवश्यकता है तो आप अपने ORM के साथ एक पारंपरिक SQL दृष्टिकोण का उपयोग कर सकते हैं।

अगर वहाँ एक तेज / बेहतर ORM? आपके ऑब्जेक्ट / डेटा मॉडल के आधार पर, आप माइक्रो- ओआरएम में से किसी एक का उपयोग करने पर विचार कर सकते हैं, जैसे कि डैपर , मैसिव या पेटाकोको

डापर साइट कुछ तुलनात्मक बेंचमार्क प्रकाशित करती है जो आपको एक विचार देगा कि वे अन्य ओआरएम की तुलना कैसे करते हैं। लेकिन यह ध्यान देने योग्य है कि माइक्रो-ओआरएम पूर्ण ओआरएम जैसे ईएफ और एनएच की समृद्ध सुविधा सेट का समर्थन नहीं करते हैं।

आप RavenDB पर एक नज़र डालना चाह सकते हैं । यह एक गैर-संबंधपरक डेटाबेस (आयेंडे से फिर से) है जो आपको सीधे POCO को स्टोर करने देता है जिसमें कोई भी मैपिंग आवश्यक नहीं है । रेवेनडीबी रीड के लिए अनुकूलित है और स्कीमा में हेरफेर करने और उस स्कीमा में अपनी वस्तुओं को मैप करने की आवश्यकता को हटाकर डेवलपर्स के जीवन को बहुत आसान बना देता है। हालांकि, इस बात से अवगत रहें कि ORM दृष्टिकोण का उपयोग करने के लिए यह काफी अलग दृष्टिकोण है और इन्हें उत्पाद की साइट में उल्लिखित किया गया है ।


3

मैंने @Slauma द्वारा उत्तर पाया है कि यहाँ चीजों को गति देने के लिए बहुत उपयोगी है। मैंने आवेषण और अपडेट दोनों के लिए एक ही तरह के पैटर्न का उपयोग किया - और प्रदर्शन रॉकेट किया।


2

मेरे अनुभव से, समस्या ईएफ के साथ नहीं है, लेकिन ओआरएम स्वयं के साथ है।

सामान्य तौर पर सभी ORMs N + 1 समस्या से ग्रस्त होते हैं जो अनुकूलित प्रश्नों और आदि का नहीं है। मेरा सबसे अच्छा अनुमान उन प्रश्नों को ट्रैक करना होगा जो प्रदर्शन में गिरावट का कारण बनते हैं और ORM टूल को ट्यून करने की कोशिश करते हैं, या SPROC के साथ उस भागों को फिर से लिखते हैं।


1
लोग मुझे यही बताते रहते हैं। लेकिन मैं पुराने स्कूल एडीओ का उपयोग करके एक सरल चयन कथन स्थापित करूंगा, और एक ईएफ संदर्भ और ईएफ का उपयोग करके समान सरल चयन हमेशा काफी धीमा होता है। मैं वास्तव में ईएफ को पसंद करना चाहता हूं, लेकिन यह आसान के बजाय जीवन को कठिन बना रहा है।
सिनास्टेटिक

1
@ निश्चय ही यह धीमा है। उसी टोकन के द्वारा, वस्तुओं को Linq का उपयोग करके लिखा गया कोड आमतौर पर इसके बिना लिखे गए कोड की तुलना में धीमा होता है। सवाल वास्तव में यह नहीं है कि क्या यह तेज है या जितना तेज है (यह कैसे हो सकता है, जब हुड के तहत इसे अभी भी उस क्वेरी को जारी करना है जो आप हाथ से जारी कर रहे थे?) लेकिन क्या 1) यह अभी भी आपकी आवश्यकताओं के लिए पर्याप्त तेज है 2) यह बचाता है? आप समय 3 कोड लिख) लाभ लागत ऑफसेट। उन मदों के आधार पर मुझे लगता है कि ईएफ बहुत सारी परियोजनाओं के लिए उपयुक्त है।
केसी

@ साइनस्टैटिक मैं यह भी जोड़ूंगा कि यदि आप एक ORM का उपयोग नहीं करते हैं, तो अधिक बार ऐसा नहीं होता है कि ऐसा नहीं है कि प्रत्येक SQL क्वेरी ठीक-ठीक और अनुकूलित है, लेकिन यह कि एप्लिकेशन एक इन-हाउस, जैविक, खराब रूप से विकसित हो रहा है समर्थित, खराब प्रदर्शन करने वाला ORM, जब तक कि आपकी टीम असाधारण रूप से अनुशासित न हो और प्रदर्शन के बारे में बहुत चिंतित हो।
केसी

1

यह साधारण गैर-ढांचा है, गैर-ओआरएम विकल्प है जो 30 / या के साथ 10,000 / सेकंड पर लोड करता है। एक पुराने लैपटॉप पर चल रहा है, इसलिए शायद वास्तविक माहौल में इससे कहीं तेज है।

https://sourceforge.net/projects/dopersistence/?source=directory


1

मैं इस मुद्दे में भी भाग गया। मुझे ईएफ पर डंप करने से नफरत है क्योंकि यह इतनी अच्छी तरह से काम करता है, लेकिन यह अभी धीमा है। ज्यादातर मामलों में मैं सिर्फ रिकॉर्ड या अपडेट / इंसर्ट ढूंढना चाहता हूं। इस तरह के सरल ऑपरेशन भी धीमे हैं। मैंने एक सूची में तालिका से 1100 रिकॉर्ड वापस खींच लिए और उस ऑपरेशन को EF के साथ 6 सेकंड का समय लगा। मेरे लिए यह बहुत लंबा है, यहां तक ​​कि बचत में भी बहुत समय लगता है।

मैंने अपना ओआरएम खुद ही बना लिया। मैंने एक डेटाबेस से उन्हीं 1100 रिकॉर्डों को खींचा और मेरे ORM को EF की तुलना में 2 सेकंड अधिक समय लगा। मेरे ORM के साथ सब कुछ लगभग तुरंत है। अभी केवल सीमा यह है कि यह केवल MS SQL सर्वर के साथ काम करता है, लेकिन इसे Oracle जैसे अन्य लोगों के साथ काम करने के लिए बदला जा सकता है। मैं अभी सब कुछ के लिए MS SQL सर्वर का उपयोग करता हूं।

यदि आप मेरे ओआरएम को आजमाना चाहते हैं तो लिंक और वेबसाइट है:

https://github.com/jdemeuse1204/OR-M-Data-Entities

या यदि आप सोने की डली का उपयोग करना चाहते हैं:

PM> इंस्टॉल-पैकेज OR-M_DataEntities

वहां पर भी डॉक्यूमेंटेशन जारी है


0

यह केवल आपके द्वारा प्रोफाइल किए जाने के बाद अनुकूलित करने के लिए समझ में आता है। यदि आपको पता चलता है कि DB की पहुंच धीमी है, तो आप संग्रहीत प्रक्रियाओं का उपयोग कर सकते हैं और EF रख सकते हैं। यदि आपको पता चलता है कि यह ईएफ ही है जो धीमा है, तो आपको एक अलग ओआरएम पर स्विच करना पड़ सकता है या ओआरएम का उपयोग नहीं करना चाहिए।


0

हमारे पास एक समान एप्लिकेशन (Wcf -> EF -> डेटाबेस) है जो प्रति सेकंड 120 अनुरोधों को आसानी से करता है, इसलिए मुझे यकीन है कि EF आपकी समस्या यहां नहीं है, कहा जा रहा है कि मैंने संकलित प्रश्नों के साथ बड़े प्रदर्शन में सुधार देखा है।


मेरा ९ my% कोड क्रिएट और अपडेट कॉल है। मुझे नहीं पता कि क्या फर्क पड़ता है, लेकिन यह 120 प्रति सेकंड से बहुत धीमा है।
21

हाँ, यह एक विशिष्ट अनुप्रयोग नहीं होगा, मैं आपको अपने आवेदन को प्रोफाइल करने का सुझाव दूंगा। हमारे लिए इसका अधिकतर पाठ ...
np-hard

0

मैंने EF, LINQ to SQL और dapper का उपयोग किया। डैपर सबसे तेज है। उदाहरण: मुझे प्रत्येक 4 उप अभिलेखों के साथ 1000 मुख्य अभिलेखों की आवश्यकता थी। मैंने LINQ to sql का उपयोग किया, इसमें लगभग 6 सेकंड लगे। मैंने फिर डैपर पर स्विच किया, एकल संग्रहित प्रक्रिया से 2 रिकॉर्ड सेट को पुनः प्राप्त किया और प्रत्येक रिकॉर्ड के लिए उप रिकॉर्ड जोड़े। कुल समय 1 सेकंड।

इसके अलावा संग्रहित प्रक्रिया में क्रॉस अप्लाई के साथ टेबल वैल्यू फ़ंक्शंस का इस्तेमाल किया गया है, मैंने पाया है कि स्केलर वैल्यू फ़ंक्शंस बहुत धीमे हैं।

मेरी सलाह यह होगी कि EF या LINQ का उपयोग SQL में किया जाए और कुछ स्थितियों के लिए डपर में स्विच किया जाए।


-1

इकाई ढांचे में बड़ी अड़चनें नहीं होनी चाहिए। संभावना है कि अन्य कारण हैं। आप EF को Linq2SQL में बदलने का प्रयास कर सकते हैं, दोनों में तुलनात्मक विशेषताएं हैं और कोड को परिवर्तित करना आसान होना चाहिए लेकिन कई मामलों में Linq2SQL EF से तेज है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.