2012-12-19 18 views
9

मैं इकाई ढांचे का उपयोग कर सैकड़ों हजारों रिकॉर्ड सहेजने की कोशिश कर रहा हूं।System.OutOfMemoryException?

: रिकॉर्ड के हजारों की कुछ सैकड़ों सहेजने के बाद मैं त्रुटि निम्न मिल System.OutOfMemoryException

मेरे कोड

foreach (BibContent objbibcontents in lstBibContent) 
     { 
      db.BibContents.AddObject(objbibcontents); 
      c = c + 1; 
      if (c == 1000) 
      { 
       db.SaveChanges(); 
       c = 0; 
      } 
     } 

मैं बचत 1000 रिकॉर्ड मेरी db एक और 1000 के रिकॉर्ड अधिभावी नहीं है के बाद देखा। यह उन्हें मेरे dbcontext में जोड़ रहा है।

मैं 1000 रिकॉर्ड के बाद एक नया उदाहरण बना रहा हूं लेकिन मेरे डीबी के पास अभी भी पिछले ऑब्जेक्ट का डेटा है। मेरा कोड

foreach (var objbibcontents in lstBibContent) 
      { 
       vibrantEntities db1 = new vibrantEntities(szConStr); 
       lstBibCon.Add(objbibcontents); 
       // db.BibContents.AddObject(objbibcontents); 
       c = c + 1; 
       if (c == 1000) 
       { 
        foreach (BibContent bibobject in lstBibCon) 
        { 
         db1.BibContents.AddObject(bibobject); 
        } 
        lstBibCon.Clear(); 
        db1.SaveChanges(); 
        c = 0; 
        flag = 1; 
       } 
      } 

उत्तर

12

आप कितने ऑब्जेक्ट्स को सहेजने जा रहे हैं और एकल ऑब्जेक्ट कितना बड़ा है? डीबीकॉन्टेक्स्ट में AddObject कॉल के साथ जोड़े गए सभी ऑब्जेक्ट्स के संदर्भ हैं। कॉलिंग SaveChanges अपने आंतरिक डेटा संरचनाओं को शुद्ध नहीं करता है, इसलिए यदि आप 1 एम ऑब्जेक्ट्स के लिए अपना कोड कॉल करते हैं तो आपके पास स्मृति में 1 एम ऑब्जेक्ट होगा और वे पूरी तरह जिंदा रहेंगे क्योंकि जीसी के लिए उनकी मूल वस्तु संदर्भ उदाहरण होगी जो अभी भी आपके चलने के दायरे में है कोड।

यदि आप स्मृति समस्या से बचना चाहते हैं तो आपको प्रत्येक 1000 रिकॉर्ड (या यहां तक ​​कि प्रत्येक रिकॉर्ड) के लिए एक नया संदर्भ उदाहरण का उपयोग करना चाहिए। 1000 रिकॉर्ड्स के लिए SaveChanges चलाने और एकल रिकॉर्ड के लिए स्वचालित अंतर स्वचालित रूप से शामिल लेनदेन है।

+0

मैं अपने dbcontext साफ कर सकते हैं बल्कि उसके बाद फिर से बनाने के? –

+0

आपको प्रत्येक जोड़ा ऑब्जेक्ट को अलग-अलग के रूप में जाना होगा और सेट करना होगा। एक नया संदर्भ उदाहरण बनाना बहुत बेहतर तरीका है। –

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