2011-11-12 9 views
5

समस्या का दायरा: मैं Enterprise Library डेटा एक्सेस ब्लॉक की गति और विश्वसनीयता की किसी भी व्यापार बंद के बिना EF4.1 का उपयोग करना चाहता हूं जो मुझे पता है और भरोसा है।एंटीटी फ्रेमवर्क 4.1 बनाम एंटरप्राइज़ डेटा एप्लिकेशन ब्लॉक अधिकतम प्रदर्शन

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

परियोजना: 1. संस्थाओं/गतिशील एसक्यूएल के लिए कोई linq। मुझे linq पसंद है, मैं बस वस्तुओं के खिलाफ इसका उपयोग करने की कोशिश करो। 2. 100% संग्रहीत प्रक्रियाएं और कोई ट्रैकिंग नहीं, कोई विलय नहीं, और सबसे महत्वपूर्ण बात, कभी भी कॉल नहीं करें। सेव चेंज()। मैं बस डालने/अद्यतन/डिस्क DbContext.StoredProcName (पैरा) हटा दें। इस बिंदु पर हमने ईएफ के कई तेजी से देव तत्वों को समाप्त कर दिया है, लेकिन जिस तरह से यह आपके संग्रहित प्रो के लिए एक जटिल प्रकार बनाता है, वह मेरे लिए पर्याप्त है।

SqlTable Row Count The Class The Mapper GetString और इसी तरह के तरीकों एक AbstractMapper कि सिर्फ उम्मीद प्रकार के माध्यम से चला जाता है और प्रकार में DataReader डाले हैं। The Sproc Enterprise Lib result

तो यह जहाँ तक मेरा सवाल है हरा निशान है। मुझे धीमा होने के बारे में कुछ पता होना मुश्किल होगा।

EF result one

धीमी है कि !!! बहुत धीमा!

EF Result TWO

कि इसे और अधिक की तरह है !! Performance Pie मेरे परिणामों के आधार पर प्रदर्शन पाई को ट्रैकिंग ओवरहेड को 1% से अधिक बढ़ाया जाना चाहिए, मैंने विचारों को संकलित करने की कोशिश की और मुझे कोई ट्रैकिंग के रूप में कोई भी बढ़ावा नहीं मिला! क्यूं कर?? शायद कोई उस पर झुक सकता है।

तो, यह एंटरप्राइज़ लिब की तुलना में वास्तव में उचित नहीं है, लेकिन मैं मेटा डेटा लोड करने के लिए डेटाबेस में एक अनियमित कॉल कर रहा हूं जिसे मैं समझता हूं कि प्रति आईआईएस ऐप पूल में एक बार लोड किया जाता है। अनिवार्य रूप से एक बार अपने ऐप के जीवन में।

EF result Three

मैं एफई ऑटो संग्रहीत प्रक्रिया पीढ़ी के साथ इस तरह से उपयोग कर रहा हूँ और मैं संस्थाओं के लिए ऊपर मैप करने के लिए स्वत: आयात करने के लिए Edmx को Linq इस्तेमाल किया इन सभी edmx समारोह नोड्स। फिर मैं ऑटो इकाई प्रत्येक इकाई और एक इंजन के लिए एक भंडार।

चूंकि मैंने कभी भी सहेजेंChanges को कॉल नहीं किया है, इसलिए मैं डिजाइनर में संग्रहीत प्रोसेस में मानचित्र करने के लिए समय निकालने से परेशान नहीं हूं। इसमें बहुत लंबा समय लगता है और इसे तोड़ना आसान है और इसे नहीं पता। तो मैं सिर्फ संदर्भ से procs बुलाओ।

इससे पहले कि मैं वास्तव में अपने नए मिशन में महत्वपूर्ण चिकित्सा उपकरण वितरण वेब एप्लिकेशन में इसे लागू करने से पहले मैं किसी भी अवलोकन और आलोचनाओं की सराहना करता हूं।

धन्यवाद!

+0

अब मैं एक दो महीने के लिए इस का उपयोग करते हुए किया गया है यह बहुत अच्छा काम कर रहा है, लेकिन एक बात के लिए है। ईएफ स्रोत नियंत्रण नहीं है या दोस्ताना विलय नहीं है। यदि कोई शरीर ईएफ के बारे में बाड़ पर है तो मुझे विश्वास है कि प्रदर्शन मुख्य मुद्दा नहीं है .. ईएफ पूरे .edmx को अद्यतन करता है और आरेखण xy स्थानों को .edmx में संग्रहीत करता है जिससे फ़ाइल को मर्ज करने में बहुत मुश्किल होती है .. मेरे पास भी है दो अलग-अलग देवताओं के अलावा एक ही अपरिवर्तित एक्सएमएल नोड्स हजारों लाइनों को देखा। कोड स्मिथ ने प्लिनको और एमएस के साथ इस समस्या को हल किया। – TheDev6

उत्तर

5

बस कुछ टिप्पणी:

Performance Pie मेरे परिणाम पर कि प्रदर्शन पाई अधिक 1% से भी मैंने कोशिश की पूर्व विचारों का संकलन एक बहुत द्वारा ट्रैकिंग भूमि के ऊपर वृद्धि करनी चाहिए और कुछ भी नहीं एक के रूप में बड़ा हो गया आधार कोई ट्रैकिंग के रूप में बढ़ावा! क्यों ??

ब्लॉग पोस्ट 2008 से है और इसलिए ईएफ संस्करण 1 और EntityObject व्युत्पन्न इकाइयों पर आधारित है। ईएफ 4.1 के साथ आप पीओसीओ का उपयोग कर रहे हैं। परिवर्तन ट्रैकिंग पीओसीओ के साथ बहुत अलग व्यवहार करती है। विशेष रूप से जब किसी POCO ऑब्जेक्ट को डेटाबेस से ऑब्जेक्ट संदर्भ में लोड किया जाता है तो एंटीटी फ्रेमवर्क मूल संपत्ति मानों का एक स्नैपशॉट बनाता है और स्टोर संदर्भ में है। परिवर्तन ट्रैकिंग वर्तमान इकाई मानों और मूल स्नैपशॉप मानों के बीच तुलना पर निर्भर करती है। इस स्नैपशॉट को बनाना प्रदर्शन और स्मृति खपत के मामले में भी महंगा है। मेरे अवलोकन यह है कि कम से कम 50 प्रतिशत (क्वेरी समय के बिना परिवर्तन ट्रैकिंग परिवर्तन ट्रैकिंग के साथ क्वेरी समय का आधा है)। ऐसा लगता है कि आपने एक बड़ा प्रभाव भी मापा है।

परियोजना: 1. संस्थाओं/गतिशील एसक्यूएल के लिए कोई linq। मुझे linq पसंद है, मैं बस ज्यादातर वस्तुओं के खिलाफ इसका उपयोग करने की कोशिश करें। 2. 100% संग्रहीत प्रक्रियाएं और ट्रैकिंग, कोई विलय नहीं, और सबसे महत्वपूर्ण बात, कभी भी कॉल नहीं करें। सेव चेंज()। मैं बस डालने/अपडेट/हटाएं डीबीसीएन्टेक्स्ट.स्टोरप्रोकनाम (पैराम्स) को हटाएं। इस बिंदु पर हमने ईएफ के तेज़ देव तत्वों में से कई को हटा दिया है, लेकिन जिस तरह से यह आपके संग्रहित प्रो के लिए जटिल प्रकार बनाता है, वह मेरे लिए पर्याप्त है।

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

कुछ दिन पहले यहां ईएफ प्रदर्शन के बारे में बहुत अच्छे प्रश्न थे। यह करने के लिए "प्रोग्रामर" अब माइग्रेट किया गया:

https://softwareengineering.stackexchange.com/questions/117357/is-entity-framework-suitable-for-high-traffic-websites

+0

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

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