के लिए टिप्स क्या हैं मैंने फैसला किया कि एक ओआरएम का उपयोग न करें और मेरे प्रोजेक्ट के लिए सीधे ADO.NET का उपयोग न करें। मुझे पता है कि मुझे पता है कि यह कार्यक्रम में अधिक समय लगेगा, लेकिन मैं सिर्फ पेजों को चरम समय पर भी तेज गति से लोड करना चाहता हूं।सी # - कुछ उच्च प्रदर्शन सर्वोत्तम अभ्यास/ADO.NET
उत्तर
एक त्रुटि मैं बार-बार देखते हैं और फिर से:
instantiating और सब कुछ (DbConnection, DbCommand, DbParameters) एक तरीका है जिसके एक तंग पाश में बार-बार कहा जाता है के अंदर की स्थापना।
अधिकांश समय आप क्लास सदस्यों के रूप में उन स्थानीय चरों को दोबारा शुरू कर सकते हैं और विधि के अंदर केवल डीबी पैरामीटर को अद्यतन रखते हैं। इस लूप के बाहर दोहराव सामान ले जाने के बारे बिंदु प्रदर्शित करने का एकमात्र उद्देश्य के लिए एक त्वरित इकट्ठे नमूना है:
टिप्पणी
अस्वीकरण में के लिए कहा नमूना कोड शामिल करने के लिए अद्यतन किया गया। अन्य बेहतर अभ्यास जरूरी नहीं हैं।
class PersonDal {
public int Insert(Person person) {
DbProviderFactory factory = SqlClientFactory.Instance;
using (DbConnection connection = factory.CreateConnection()) {
connection.Open();
connection.ConnectionString = "Whatever";
using (DbCommand command = connection.CreateCommand()) {
command.CommandText = "Whatever";
command.CommandType = CommandType.StoredProcedure;
DbParameter id = command.CreateParameter();
id.ParameterName = "@Id";
id.DbType = DbType.Int32;
id.Value = person.Id;
DbParameter name = command.CreateParameter();
name.ParameterName = "@Name";
name.DbType = DbType.String;
name.Size = 50;
name.Value = person.Name;
command.Parameters.AddRange(new DbParameter[] { id, name });
return (int)command.ExecuteScalar();
}
}
}
}
अब हम यह लूप से बाहर छोड़ने वस्तुओं निर्माण करने के लिए सेटअप के लिए कदम:
public static void Show() {
List people = new List();
//Everything is done inside the loop
PersonDal personDal = new PersonDal();
foreach (Person person in people) {
personDal.Insert(person);
}
//Things are setup once outside the loop.
using (DbConnection connection = SqlClientFactory.Instance.CreateConnection()) {
// setup the connection
BetterPersonDal betterPersonDal = new BetterPersonDal(connection);
connection.Open();
foreach (Person person in people) {
betterPersonDal.Insert(person);
}
}
}
}
class Person {
public int Id { get; set; }
public string Name { get; set; }
}
यह पहली कार्यान्वयन पर, हर चीज हर बार विधि कहा जाता है की स्थापना की है:
class BetterPersonDal {
private DbProviderFactory factory;
private DbConnection connection;
private DbCommand command;
private DbParameter id;
private DbParameter name;
public BetterPersonDal(DbConnection connection) {
this.command = connection.CreateCommand();
this.command.CommandText = "Whatever";
this.command.CommandType = CommandType.StoredProcedure;
this.id = command.CreateParameter();
this.id.ParameterName = "@Id";
this.id.DbType = DbType.Int32;
this.name = command.CreateParameter();
this.name.ParameterName = "@Name";
this.name.DbType = DbType.String;
this.name.Size = 50;
this.command.Parameters.AddRange(new DbParameter[] { id, name });
}
public int Insert(Person person) {
this.id.Value = person.Id;
this.name.Value = person.Name;
return (int)command.ExecuteScalar();
}
}
शामिल उदाहरण –
Improving .NET Application Performance and Scalability पुस्तक (एमएसडीएन में मुफ्त में ऑनलाइन उपलब्ध) पर एक नज़र डालें। ADO.NET प्रदर्शन में सुधार के बारे में whole chapter है।
उत्कृष्ट लिंक। एकमात्र चीज जो मैं असहमत हूं, प्रदर्शन के लिए संग्रहित प्रक्रियाओं का उपयोग करने पर उनका जोर है। जैसा कि मैं इसे समझता हूं, एसक्यूएल सर्वर के आधुनिक संस्करणों को एसक्यूएल प्रश्नों के लिए निष्पादन योजनाओं को कैश करता है, इसलिए एक विज्ञापन प्रक्रिया के बाद एक संग्रहित प्रक्रिया के रूप में तेज़ी से चलने के बाद एक विज्ञापन कार्य चलाया जाता है। हालांकि, लिंक किया गया आलेख वास्तव में माइक्रोसॉफ्ट से है, इसलिए मैं दावा नहीं कर रहा हूं कि मैं उनसे बेहतर जानता हूं। मैंने हाल ही में किए गए सभी बेंचमार्किंग में, संग्रहित प्रक्रियाओं और विज्ञापन संबंधी प्रश्नों का प्रदर्शन लगभग समान है। – MusiGenesis
वास्तव में एक बहुत अच्छी किताब है। मेरे पास इसका एक मुद्रित संस्करण है। दुर्भाग्यवश इसे 2004 से अपडेट नहीं किया गया है और बहुत सी चीजें बदल गई हैं। उदाहरण के लिए DataRow की बैकिंग स्टोर पूरी तरह से .Net 2.0 में फिर से लिखी गई थी, जो संस्करण 1.x और 2.0 के बीच डेटासेट का उपयोग करने की प्रदर्शन प्रोफ़ाइल को नाटकीय रूप से बदल दिया गया था। –
संबंध प्रबंधन के बारे में बहुत होशियार रहें। एक डीबी कनेक्शन खोलना बहुत महंगा हो सकता है इसलिए डेटाबेस एक्सेस लेयर लिखते समय इसे ध्यान में रखें और इसे ध्यान में रखें।
कनेक्शन पूलिंग सक्षम होने पर यह वास्तव में कोई समस्या नहीं होनी चाहिए। एक कनेक्शन ऑब्जेक्ट को इंस्टेंट करना और इसकी 'ओपन' विधि को कॉल करना आमतौर पर डेटाबेस से एक बिल्कुल नया कनेक्शन स्थापित करने के बजाय, पूल से उपलब्ध कनेक्शन ले जाएगा। – LukeH
ल्यूक के साथ सहमत हुए। कनेक्शन 10 से अधिक वर्षों के लिए (अधिक) के बारे में चिंता करने लायक नहीं हैं। – MusiGenesis
मुझे वीबी.Net में लिखा गया एक विरासत कोड मिला है जिसमें प्रत्येक व्यक्ति मिश्रित है जैसे कि यह वीबी 6 में लिखा गया था: कोई परत नहीं, कोई कक्षा नहीं, फॉर्म के अंदर सभी कोड और बेस मॉड्यूल ... –
यदि आप ओआरएम का उपयोग नहीं करेंगे, तो क्या आप भी अपना डेटा कैश नहीं करेंगे? ओआरएम का उपयोग करने का यह एक बड़ा फायदा है। यदि कोई डेटा कैश नहीं है, तो आपको HTML/जावास्क्रिप्ट को कैश करने के तरीकों को देखना होगा। यह आउटपुट कैश निर्देश और एसक्लड पर निर्भरता का उपयोग करके पूरा किया जा सकता है। या स्थिर एचटीएमएल और जावास्क्रिप्ट फाइलों को प्रकाशित करके। किसी भी तरह से, यदि आप हर अनुरोध पर डेटाबेस को लगातार मार नहीं रहे हैं तो आप उच्च लोड को संभालने में सक्षम होंगे।
कुछ लिंक:
ASP.NET वेब साइट निष्पादन सुधार http://www.codeproject.com/KB/aspnet/aspnetPerformance.aspx
10 ASP.NET प्रदर्शन और अनुमापकता राज http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
ASP.NET अजाक्स और नेट परउमर अल Zabir ब्लॉग 3.5 http://msmvps.com/blogs/omar/archive/tags/performance/default.aspx
लेख मार्टिन लिंक उत्कृष्ट है। मैं बस जोड़ता हूं कि आप निश्चित रूप से डेटासेट के बजाय डेटा रीडर का उपयोग करना चाहते हैं (मुझे डेटासेट पसंद है, लेकिन प्रदर्शन कारणों से नहीं)।
जब तक आपको वापस जाना नहीं है डेटा रिकॉर्ड का उपयोग करने वाले मामले में पिछले रिकॉर्ड एक अच्छा विचार हो सकता है। –
@ अल्फ्रेड: उन्होंने कहा कि वह "चाहते हैं [पेज] पृष्ठों को उच्च गति पर लोड करना चाहते हैं", इसलिए मुझे लगता है कि वह एएसपी.Net के बारे में बात कर रहा है। इस मामले में उपयोगकर्ता को डेटासेट में पिछले रिकॉर्ड पर वापस जाने का अर्थ डेटासेट को कैशिंग करना होगा, जो शायद एक अच्छा विचार नहीं होगा। – MusiGenesis
@MusiGenesis: मैं आपसे असहमत नहीं हूं। आपने कहा कि आप डेटासेट्स से प्यार करते हैं और मैं एक उदाहरण दे रहा हूं जब वे उपयुक्त हों। यहां तक कि * सुपर डुपर * हाई स्पीड वेबपृष्ठ पर, किसी को भी तर्क हो सकता है कि जो भी व्यावसायिक कारणों से पिछले रिकॉर्ड तक पहुंच की आवश्यकता हो। डेटाबेस पर वापस जाने के बजाय, डेटासेट का उपयोग करें। कैश पर कोई डेटासेट नहीं - कुछ भी नहीं। अनुरोध के जीवनकाल के दौरान बस एक डेटासेट का उपयोग किया जा रहा है। –
- 1. उच्च प्रदर्शन नेटवर्क अनुप्रयोगों के सर्वोत्तम अभ्यास
- 2. उच्च प्रदर्शन
- 3. उच्च-प्रदर्शन रीयलटाइम डेटा प्रदर्शन
- 4. उच्च प्रदर्शन सी ++ बहु आयामी सरणी
- 5. उच्च प्रदर्शन साइट
- 6. सर्वोत्तम प्रदर्शन
- 7. सर्वोत्तम प्रदर्शन
- 8. उच्च प्रदर्शन हाइबरनेट सम्मिलित
- 9. सुपर उच्च प्रदर्शन सी/सी ++ हैश नक्शा (तालिका, शब्दकोश)
- 10. wpf 2d उच्च प्रदर्शन ग्राफिक्स
- 11. उच्च प्रदर्शन (500-1000 नोड्स)
- 12. QPainter प्रदर्शन उच्च फ्रेम दर
- 13. उच्च प्रदर्शन कम विलंबता सी ++ कस्टम स्ट्रिंग वर्ग
- 14. उच्च प्रदर्शन सी # सर्वर सॉकेट के लिए टिप्स/तकनीक
- 15. वीसी ++/सी ++ उच्च प्रदर्शन मल्टीथ्रेड किए गए जीयूआई व्यापार
- 16. उच्च प्रदर्शन ग्राफिक्स WPF दृश्य परत
- 17. उच्च प्रदर्शन कैसे लिखें नेटी क्लाइंट
- 18. सी # उच्च परिशुद्धता गणना
- 19. सी # उच्च डबल परिशुद्धता
- 20. सी # - एक उच्च गतिविधि सर्वर
- 21. कुछ सी ++ मानक पुस्तकालय उपयोग सर्वोत्तम प्रथाओं क्या हैं?
- 22. टीसीपी विश्वसनीयता बनाम उद बर्डेंस गंभीर, उच्च प्रदर्शन सर्वर
- 23. उच्च प्रदर्शन एएसपी.नेट साइट (> 1000 अनुरोध/सेकेंड)
- 24. प्रदर्शन के लिए सर्वोत्तम अभ्यास प्रथाओं
- 25. CSS3 - प्रदर्शन सर्वोत्तम प्रथाओं क्या हैं?
- 26. सी # गहरी एक्सेसिंग ऑब्जेक्ट्स प्रदर्शन
- 27. उच्च ट्रैफ़िक वेबसाइट पर प्रदर्शन के लिए कितना महत्वपूर्ण है?
- 28. उच्च डेटा दरों के साथ ग्राफिकल चार्ट का प्रदर्शन बढ़ाना
- 29. जावा: उच्च-प्रदर्शन संदेश-पासिंग (सिंगल-निर्माता/सिंगल-उपभोक्ता)
- 30. उच्च प्रदर्शन SQL सर्वर डेटाबेस डिज़ाइन के लिए संसाधन
क्या डेटाबेस (मैं SQL सर्वर मानता हूं)? – MusiGenesis
मैं समयपूर्व अनुकूलन से बचूंगा। * सादे पुराने * ADO.NET का उपयोग करने के लिए – Alex
+1 :) –