2011-07-19 8 views
5

ईडीएमएक्स इकाई मॉडल में लगभग 350 इकाइयों के साथ एक परियोजना पर, मेरी टीम लंबे समय तक प्रतीक्षा कर रही है जब पहली क्वेरी होती है और जब पहली बचत होती है।एंटिटी फ्रेमवर्क 4.0 बड़े मॉडल स्टार्टअप प्रदर्शन में सुधार कैसे करें?

जब एक साधारण मामला है जिसमें कुछ प्रश्नों सिर्फ एक प्रश्न आग और बचाने के लिए कदम की एक सरल सेट चलाता है और बचाता है, रूपरेखा मिनट लगते हैं।

पहली क्वेरी कुल समय का 47% केवल उस कॉलवर्क विधि को कॉल करती है जो क्वेरी निष्पादित करती है।

पहले बचाने सिर्फ System.Data.Objects.ObjectContext.SaveChanges में समग्र समय के 50% लेता है।

वहाँ प्रदर्शन में सुधार के लिए किसी भी अच्छा विकल्प हैं - इस विकास समय पर एक नाली हो सकता है।

(एक बार प्रणाली उत्पादन मारता है, यह स्टार्टअप पर कष्टप्रद है, लेकिन चल रहे निष्पादन के दौरान नहीं एक समस्या)

उत्तर

6

आप पहली बार के लिए संदर्भ का उपयोग करते हैं यह मानचित्रण मॉडल मेटाडाटा में परिभाषित उत्पन्न करता है। विकल्प pregenerate this model पर है और आपके एप्लिकेशन में प्रीजेनरेटेड फाइलें शामिल हैं (लेकिन जब भी आप अपना EDMX संशोधित करते हैं तो आपको इसे पुन: उत्पन्न करना होगा)।

इस तरह का एक बड़ा मॉडल शायद कई छोटे मॉडल में बांटा जाना चाहिए। मुझे शायद ही विश्वास है कि 350 इकाइयां एकल डोमेन बनाती हैं जिन्हें विभाजित नहीं किया जा सकता है।

+0

धन्यवाद! यह अच्छी तरह से काम किया। मैं टी -4 टेम्पलेट genenration methoed लेख आपको संदर्भित में से जुड़ा हुआ का उपयोग कर समाप्त हो गया। इसने मेरी प्रारंभिक क्वेरी को मूल समय के 5% से कम और प्रारंभिक बचत को समान रूप से कम कर दिया। समय लागत को ईडीएमएक्स को बचाने के लिए स्थानांतरित किया जाता है, लेकिन चूंकि यह कम लगातार संचालन होता है, इसलिए डिबगिंग रनों के दौरान महत्वपूर्ण विकास समय बचाया जाता है। http://blogs.msdn.com/b/adonet/archive/2008/06/20/how-to-use-a-t4-template-for-view-generation.aspx – BrianCooksey

+0

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

1

एक बड़ा ईडीएमएक्स परिणामस्वरूप एक बड़ा ऑब्जेक्ट कॉन्टेक्स्ट होगा। हर बार जब आप using(var ctx = new YourObjectContext()) करते हैं तो यह एक बड़ी वस्तु का निर्माण करने जा रहा है, बहुत से संग्रह (शायद उनमें से 350) शुरू करना है और यह आपके डेटाबेस संचालन CPU को गहन बनाने जा रहा है। जब आप उच्च मात्रा यातायात प्राप्त करते हैं तो आप निश्चित रूप से प्रदर्शन चुनौतियों को प्रभावित करेंगे।

मैं छोटे edmx में बड़े WDMX तोड़ने का सुझाव और विभिन्न ObjectContexts उत्पादन होगा। आपको छोटी संख्या में तार्किक रूप से समूहीकृत इकाइयों को एक ऑब्जेक्ट कॉन्टेक्स्ट में रखना चाहिए।

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