2011-12-31 8 views
6

क्या डेटाबेस में रिकॉर्ड डालने के लिए सबसे तेजी से विकल्प है: का उपयोग कर इनमें से जो:पेटापोको सम्मिलित करें - सबसे तेज़ तरीका?

  • Database.Insert(poco)
  • Database.Insert(tableName, pkName, poco)
  • Database.Save(poco)
  • Database.Save(tableName, pkName, poco)

कौन सा मैं के लिए उपयोग करना चाहिए प्रदर्शन कारणों? एक दूसरे के मुकाबले मेरे लिए कम सुविधाजनक नहीं है ...

धन्यवाद।

उत्तर

10

प्रदर्शन कारणों से मुझे किस का उपयोग करना चाहिए?

Database.Save तरीकों GetValue का उपयोग कर प्राथमिक कुंजी फ़ील्ड का मान पुनः प्राप्त है, तो कॉल Database.Insert या Database.Update तदनुसार।

इसलिए, आपको केवल Database.Save का उपयोग करना चाहिए जब आपके कोड को वास्तव में किसी ऑब्जेक्ट पर परिवर्तनों को सहेजने की आवश्यकता होती है जो कि नई या पूर्ववर्ती हो सकती है। साथ ही, ध्यान दें कि आपकी तालिका में Database.Save के लिए काम करने के लिए स्वत: वृद्धिशील प्राथमिक कुंजी कॉलम होना चाहिए।

मामूली प्रदर्शन अंतर के बावजूद, मैं सही अर्थशास्त्र पसंद करता हूं - सहेजें पर सम्मिलित या अद्यतन का उपयोग कर।

एक अन्य की तुलना में मेरे लिए कम सुविधाजनक

यह वास्तव में सच नहीं है नहीं है ...।

Database.Insert(poco) आपके पोको वर्ग की परिभाषा पर कस्टम विशेषताओं में tableName और pkName के लिए मूल्यों की तलाश करेगा। यदि आप टी 4 टेम्पलेट्स का उपयोग करते हैं, तो इन मानों को स्वचालित रूप से आपके डेटाबेस के साथ सिंक में रखा जाएगा, और उन्हें केवल एक ही स्थान पर निर्दिष्ट किया जाएगा। दूसरी तरफ, यदि आप उन्हें प्रत्येक विधि कॉल में पास करते हैं तो उन्हें आपके कोड बेस में अनगिनत बार दोहराया जाएगा। सूखी। क्या होगा यदि आपको बाद में मूल्यों में से किसी एक को बदलने की आवश्यकता है?

अब, Database.Insert(poco) उस लुकअप के कारण थोड़ा कम प्रदर्शन करेगा।हालांकि, PetaPoco एक स्थिर शब्दकोश में है कि देखने का परिणाम कैश, इसलिए प्रदर्शन प्रभाव पहले देखने के बाद बहुत छोटा हो जाएगा:

RWLock.EnterReadLock(); 
PocoData pd; 
try 
{ 
    if (m_PocoDatas.TryGetValue(t, out pd)) 
     return pd; 
} 
finally 
{ 
    RWLock.ExitReadLock(); 
} 
+0

हाँ, इस बयान "एक अन्य की तुलना में मेरे लिए कम सुविधाजनक नहीं है द्वारा। .. ", मैंने इसका इलाज करने के लिए क्या किया था: http://blogs.msmvps.com/bmains/2011/12/31/helpful-petapoco-template-modifications/ DRY का उल्लंघन, हाँ, लेकिन यह प्रदर्शन के लिए बेहतर है इसके अनुसार: http://www.toptensoftware.com/Articles/94/PetaPoco- अधिक- स्पीड। मैं अनुकूलन को एक कदम आगे भी लेने का प्रयास कर सकता हूं ... –

+0

@ ब्रायनमेन: क्या आपको वास्तव में उस अतिरिक्त छोटी गति को निचोड़ने की आवश्यकता है? मैंने थोड़ी देर के लिए अनुकूलित सबसोनिक टेम्पलेट्स के साथ काम किया (हम अभी भी उन्हें एक ऐप में इस्तेमाल करते हैं), और यह एक ड्रैग था। किसी भी मामले में, मुझे लगता है कि मैंने अपने जवाब में ट्रेडऑफ स्पष्ट रूप से निर्धारित किए हैं। आप निश्चित रूप से मार्ग बनाए रखने के लिए आसान मार्ग पर तेजी से मार्ग चुन सकते हैं, लेकिन कुछ उपयोगों को वास्तव में इसकी आवश्यकता होगी। सबसे बड़ा लाभ बैचिंग ऑपरेशंस, तैयार बयान, उचित सूचकांक इत्यादि से होगा –

+0

ठीक है, इनपुट के लिए धन्यवाद। –

3

तरीकों आप सूचीबद्ध सभी 4 में, आवेषण के लिए, यह PetaPoco हमेशा डाटाबेस वर्ग के लिए निम्न विधि कॉल की तरह दिखता है:

public object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco) 

और Database.Insert(tableName, pkName, poco) काम के कम से कम राशि करता है (यह मूल रूप से है बस विधि के माध्यम से एक पास), तो मुझे लगता है कि यह सबसे अच्छा प्रदर्शन वाला एक है।

public object Insert(string tableName, string primaryKeyName, object poco) 
{ 
    return Insert(tableName, primaryKeyName, true, poco); 
} 

यह शायद थोड़ा (और unnoticeably) तेजी से होगा बस सीधे Insert(string, string, bool, object) अधिभार फोन:

यहाँ Insert(string, string, object) के लिए कोड है।

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