2011-07-26 12 views
6

मैं .NET इकाई फ्रेमवर्क में नया हूं और कई लाख पंक्तियों के साथ तालिका में रिकॉर्ड्स पर फिर से प्रयास करने की कोशिश कर रहा हूं। यहाँ बुनियादी कोड है:इकाई फ्रेमवर्क क्वेरी outofmemoryexception

// select the records from the database 
var records = from data in dataContext.Messages 
       select data; 

// iterate over the messages 
foreach (var record in records) 
{ 
    // do nothing 
} 

डेटा पर पुनरावृत्ति जबकि मैं एक 'OutOfMemoryException' मिलता है। क्या कोई तरीका है कि मैं अपनी क्वेरी को बदल सकता हूं या ObjectQuery इंस्टेंस की स्मृति का प्रबंधन कर सकता हूं?

+0

आप उस पुनरावृत्ति के अंदर क्या करते हैं? – Tigran

+0

[एंटिटी फ्रेमवर्क बड़े डेटा सेट, मेमोरी अपवाद से बाहर] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/18169859/entity-framework-large-data-set-out-of-memory-exception) –

उत्तर

4

मुझे लगता है समस्या यह है कि इकाई की रूपरेखा कैश करने के लिए कोशिश कर रही है/में यह सब डेटा ट्रैक अपने ऑब्जेक्ट संदर्भ, जो अंततः आउटऑफमेमरी अपवाद का कारण बनता है यदि डेटा सेट बड़ा है।

आप बंद पर नज़र रखने के लिए मैन्युअल रूप से इस से बचने के लिए कर सकते हैं:

dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking; 

स्मृति आवंटित कि आप वर्तमान में देख रहे हैं डेटा संदर्भ में है - इस स्मृति अंत में कचरा एक बार आप संदर्भ निपटाने एकत्र हो जाएगी, तो वैकल्पिक रूप से आप एक प्रयोग ब्लॉक के अंदर पंक्तियों के छोटे बैचों को मूर्तिकला दे सकते हैं या प्रत्येक बैच के बीच स्मृति को पुनः प्राप्त करने के लिए मैन्युअल संदर्भ को ऑब्जेक्ट संदर्भ का निपटान कर सकते हैं।

+1

सेट करना मर्जऑशन टू नोट्रैकिंग ने इस मुद्दे को ठीक किया। धन्यवाद। – mdeangelo272

+0

मैं इस कॉन्फ़िगरेशन को कहां सेट करूं? कौनसी कक्षा में? – jairhumberto

0

आपकी क्वेरी में फेरबदल के लिए के रूप में आप जहां खंड वापस आ रहा रिकॉर्ड नीचे धीरे-धीरे कम करने के लिए एक जोड़ सकते हैं:

http://msdn.microsoft.com/en-us/library/bb311043.aspx

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