का उपयोग करके बहुत धीमी डालने की प्रक्रिया मैं सी # से एसक्यूएलसेवर 2008 एक्सप्रेस डीबी से लिंकक्टोस्क्ल का उपयोग करके बड़ी संख्या में रिकॉर्ड डाल रहा हूं। ऐसा लगता है कि इसमें सम्मिलन बहुत धीमा है। कोड स्निपेट निम्नलिखित है।लिंक से एसक्यूएल
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List<Item> result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
क्या मैं कुछ गलत कर रहा हूं? या रिकॉर्ड की बड़ी संख्या डालने के लिए लिंक का उपयोग करना एक बुरा विकल्प है?
अद्यतन: सभी उत्तरों के लिए धन्यवाद। @ p.campbell: रिकॉर्ड गिनती के लिए खेद है, यह एक टाइपो था, वास्तव में यह लगभग 100000 है। रिकॉर्ड्स भी 200k तक है।
सभी सुझावों के अनुसार मैंने इस ऑपरेशन को भागों (एक आवश्यकता परिवर्तन और डिज़ाइन निर्णय) में स्थानांतरित कर दिया और छोटे हिस्सों में डेटा पुनर्प्राप्त किया और उन्हें आने पर डेटाबेस में डालने के बाद। मैंने थ्रेड ऑपरेशन में यह InsertData() विधि डाली है और अब एक ही ऑपरेशन करने के लिए 25 थ्रेड के पूल बनाने के लिए SmartThreadPool का उपयोग कर रहा है। इस परिदृश्य में मैं केवल 100 रिकॉर्ड दर्ज कर रहा हूं। अब, जब मैंने लिंक या एसक्यूएल क्वेरी के साथ यह कोशिश की तो उसने समय के मामले में कोई फर्क नहीं पड़ता।
मेरी आवश्यकता के अनुसार यह ऑपरेशन हर घंटे चलने के लिए निर्धारित है और लगभग 4k-6k उपयोगकर्ताओं के लिए रिकॉर्ड प्राप्त करता है। तो, अब मैं एक उपयोगकर्ता के रूप में प्रत्येक उपयोगकर्ता डेटा (डीबी में पुनर्प्राप्त और डालने) ऑपरेशन को पूल कर रहा हूं और एक थ्रेड को सौंपा गया हूं। अब इस पूरे प्रक्रिया में लगभग 250k रिकॉर्ड के लिए लगभग 45 मिनट लगते हैं।
क्या इस तरह के कार्य करने का कोई बेहतर तरीका है? या क्या कोई मुझे सुझाव दे सकता है कि मैं इस प्रक्रिया को कैसे सुधार सकता हूं?
कितने रिकॉर्ड, और ऑपरेशन कब तक चलता है? यहां क्या डेटाटाइप का उपयोग किया जा रहा है? –
1000000 से अधिक रिकॉर्ड और अधिकतर स्ट्रिंग डेटाटाइप लेकिन 10 से अधिक फ़ील्ड नहीं। – JPReddy
एक मिलियन आवेषण में समय लगेगा, इससे कोई फर्क नहीं पड़ता। मुझे संदेह है कि क्या आप जेनरेट किए गए एसक्यूएल स्टेटमेंट्स की प्रतिलिपि बनाते हैं, उनमें से सभी 1 मिलियन, और उन्हें विज्ञापन-प्रसार करते हैं, कि आपको प्रबंधन स्टूडियो से अधिक लाभ नहीं मिलेगा! –