दिलचस्प पोस्ट
सीएसएस चयनकर्ता जो दो वर्गों के तत्वों पर लागू होता है क्रिया को निष्पादित करें जब UINavigationController के बैक बार बटन दबाए जाएंगे टी-एसक्यूएल में एसक्यूएल सर्वर रेगुलर एक्सप्रेशंस फ़ॉर्म भरने और सी # में Webclient के साथ कैसे जमा करें निर्धारित करें कि एक प्रकार एक संकलित समय पर एक एसटीएल कंटेनर है विधि परिभाषा में पैरामीटर के रूप में नग्न तारांकन: def f (*) एमएस एक्सेस फॉर्म और क्लास / मॉड्यूल को लगातार पाठ फ़ाइलों में निर्यात करना? JavaScript फ़ंक्शन की परिभाषा / निष्पादन में तर्कों के नाम / मान की जांच करें एचटीएमएल को लगता है कि "चॉकनोरिस" एक रंग क्यों है? सी / सी ++ में एक DLL संकलित करें, फिर उसे किसी अन्य प्रोग्राम से कॉल करें एंड्रॉइड पर जावा कोड हालांकि शैल आदेश चल रहा है? यूनिट परीक्षण सी कोड सी # एसआईपी स्टैक / लाइब्रेरी दिनांक पिकर में दिनांक स्वरूप (एमएम / डीडी / वाई वाई) (वाई वाई वाई-एमएम-डीडी) को कैसे बदलना है शरीर का 100% ब्राउज़र ऊँचाई बनाएं

इकाई फ़्रेमवर्क बहुत धीमा है मेरे विकल्प क्या हैं?

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

हालांकि, मैंने प्रदर्शन को प्रमाणित किया और इकाई फ़्रेमवर्क बहुत धीमा है (मेरी ऐप के बारे में 1.2 सेकंड में 2 संदेशों की प्रक्रिया होती है, जहां (लिगेसी) ऐप जो मैं पुनः लिख रहा हूं उसी समय 5-6 संदेश होता है। (लीगेसी ऐप इसके डीबी एक्सेस के लिए स्प्रीक्स कॉल करता है।)

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

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

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

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

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

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

Solutions Collecting From Web of "इकाई फ़्रेमवर्क बहुत धीमा है मेरे विकल्प क्या हैं?"

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

उदाहरण:

 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 }); } 

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

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

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

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

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

और यह आपकी समस्या का हल है

एक सुझाव है कि केवल एकल रिकॉर्ड सीआरयूडी विवरणों के लिए LINQ को इकाई फ़्रेमवर्क का उपयोग करना है।

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

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

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

मर्ज ऑप्शन पर यह MSDN लेख देखें:

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

ईएफ प्रदर्शन पर यह एक अच्छा लेख है:

प्रदर्शन और इकाई फ़्रेमवर्क

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

http://efprof.com/

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

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

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

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

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

मेरे अनुभव से, ईएफ के साथ समस्या नहीं है, लेकिन ओआरएम के साथ खुद ही दृष्टिकोण

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

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

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

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

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

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

यदि आप अपने ORM की कोशिश करना चाहते हैं तो लिंक और वेबसाइट है:

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

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

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

दस्तावेज वहाँ पर भी है

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

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

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

इसके अलावा संग्रहीत प्रक्रिया का उपयोग करते हुए तालिका मूल्य फ़ंक्शन क्रॉस के साथ होता है, मुझे स्केलेर वैल्यू फ़ंक्शन बहुत धीमे लगते हैं I

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