2011-03-09 14 views
5

मेरे पास एक सारणी है जिसमें 230 कॉलम और 12 मिलियन पंक्तियां शामिल हैं।LINQ-to-Sql अद्यतन - प्रदर्शन मुद्दे

मुझे प्रत्येक पंक्ति के 123 फ़ील्ड अपडेट करने की आवश्यकता है।

यदि मैं LINQ-To-Sql के साथ ऐसा करने का प्रयास करता हूं, तो मुझे System.OutOfMemory अपवाद मिलता है।

मुझे पता है कि अगर मैं ऑब्जेक्ट ट्रैकिंग अक्षम करता हूं तो मुझे आउटफमेमरी त्रुटि नहीं मिलती है। लेकिन मुझे लगता है कि अगर मैं ऑब्जेक्ट ट्रैकिंग अक्षम करता हूं तो मैं अपडेट नहीं कर सकता।

उन्हें अपडेट करने का सबसे अच्छा तरीका क्या है?

+0

क्या 123 फ़ील्ड के मान प्रत्येक पंक्ति के लिए अलग होंगे? क्या उन्हें कुछ सूत्र के साथ गणना की जा सकती है? दूसरे शब्दों में, क्या आप इस ऑपरेशन को एक एकल SQL अद्यतन विवरण के साथ कर सकते हैं? –

+0

मुझे लगता है कि आप प्रत्येक पंक्ति में एक ही डेटा सेट कर रहे हैं, क्योंकि आप स्मृति में कई ऑब्जेक्ट्स को पकड़ने में सक्षम नहीं होंगे? सरल उत्तर एक संग्रहित प्रक्रिया का उपयोग करना है, और इसे अपनी ईडीएमएल फ़ाइल में खींचें। – Paddy

+7

230 कॉलम संदिग्ध लगता है .... –

उत्तर

10

यह LINQ-to-SQL, या स्पष्ट रूप से किसी भी ORM के लिए उपयुक्त कार्य नहीं है। आप उस डेटा को उस डेटा पर दो बार खींचना चाहते हैं; आदर्श रूप से शुद्ध टीएसक्यूएल में लिखा जाना चाहिए, यदि आप अन्य स्रोतों से डेटा को गठबंधन करने की आवश्यकता है तो एक अलग तालिका को पॉप्युलेट करने के लिए शायद थोक प्रविष्टि/SqlBulkCopy का उपयोग करना चाहिए।

0

मैं निश्चित रूप से सुझाव दूंगा कि आप आर्किटेक्चर को बदल दें, बड़ी तालिका को कई छोटे लोगों में डीक्यूपल करें और निश्चित रूप से इस डेटा के लिए linq-to-sql से बचें।

इस तरह से आर्किटेक्चर बनाएं कि आपके पास एक व्यापार स्तर पर प्रत्येक इकाई के लिए कक्षाएं हों जो डेटा एक्सेस स्तर पर डेटा अपडेट करने के लिए टी-एसक्यूएल क्वेरीज की संग्रहीत प्रक्रियाओं को कॉल करेगी।

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