मैं वर्तमान में अपने वेब एप्लिकेशन के लिए डीबी 4o के भंडारण के उपयोग पर कुछ शोध कर रहा हूं। मुझे बहुत खुशी है कि डीबी 4o कितना आसान काम करता है। तो जब मैंने कोड फर्स्ट दृष्टिकोण के बारे में पढ़ा तो मुझे पसंद आया, क्योंकि ईएफ 4 कोड के साथ काम करने का तरीका पहले डीबी 4o के साथ काम करने के समान है: अपनी डोमेन ऑब्जेक्ट्स (पीओसीओ) बनाएं, उन्हें डीबी 4o पर फेंक दें, और कभी वापस न देखें।EF4 कोड ऑब्जेक्ट्स संग्रहीत करते समय पहले इतना धीमा क्यों है?
लेकिन जब मैंने प्रदर्शन तुलना की, तो ईएफ 4 बहुत धीमी थी। और मैं समझ नहीं पाया क्यों।
मैं निम्नलिखित संस्थाओं का उपयोग करें:
public class Recipe { private List _RecipePreparations; public int ID { get; set; } public String Name { get; set; } public String Description { get; set; } public List Tags { get; set; } public ICollection Preparations { get { return _RecipePreparations.AsReadOnly(); } }
public void AddPreparation(RecipePreparation preparation)
{
this._RecipePreparations.Add(preparation);
}
}
सार्वजनिक वर्ग RecipePreparation { सार्वजनिक स्ट्रिंग नाम {मिल; सेट; } सार्वजनिक स्ट्रिंग विवरण {प्राप्त करें; सेट; } सार्वजनिक int रेटिंग {प्राप्त करें; सेट; } सार्वजनिक सूची चरण {प्राप्त करें; सेट; } सार्वजनिक सूची टैग {प्राप्त करें; सेट; } सार्वजनिक int आईडी {प्राप्त करें; सेट; } }
प्रदर्शन मैं एक नुस्खा अप नयी परीक्षा में, और 50.000 RecipePrepations जोड़ें। तब मैं तो जैसे db4o में वस्तु संग्रहीत:
cookRecipes.Recipes.Add(recipe1);
cookRecipes.SaveChanges();
:
IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), @"RecipeDB.db4o");
db.Store(recipe1);
db.Close();
यह चारों ओर 13.000 (ms)
मैं एसक्यूएल सर्वर 2008 में EF4 साथ सामान की दुकान (एक्सप्रेस, स्थानीय स्तर पर) इस तरह लेता है
और वह लेता है 200.000 (ms)
अब कैसे पृथ्वी पर db4o 15 (!!!) गुना तेजी से कि EF4/एसक्यूएल है? क्या मुझे ईएफ 4 के लिए एक गुप्त टर्बो बटन याद आ रहा है? मुझे यह भी लगता है कि डीबी 4o तेज हो सकता है? चूंकि मैं डेटाबेस फ़ाइल को प्रारंभ नहीं करता हूं, इसलिए मैं इसे गतिशील रूप से बढ़ने देता हूं।
मेरा अनुमान है कि कई एकल डालने-बयानों की भूमि के ऊपर निष्पादित किया जा रहा अंतर का सबसे बड़ा हिस्सा है। क्या ओवरहेड को कम करने के लिए सम्मिलित बयान को गठबंधन करने के लिए ईएफ 4 को निर्देश देने का कोई तरीका है? –
@Lasse: हाँ, वहाँ है। ईएफ बॉक्स के बाहर कार्य पैटर्न की इकाई लागू करता है - मेरा जवाब देखें। –
मैंने विजुअल स्टूडियो के साथ कुछ प्रोफाइलिंग की है। और cookRecipes.Recipes.Add (रेसिपी 1) स्टोर करने के लिए कुल समय का लगभग 65% लेते हैं, और SaveChanges लगभग 35% (duh ...;))। – Saab