मैं अपने एप्लिकेशन में 1 मिलियन रिकॉर्ड प्रोसेस कर रहा हूं, जिसे मैं एक MySQL डेटाबेस से पुनर्प्राप्त करता हूं। ऐसा करने के लिए मैं रिकॉर्ड प्राप्त करने के लिए लिंक का उपयोग कर रहा हूं और एक समय में 250 रिकॉर्ड्स को संसाधित करने के लिए .किप() और .टेक() का उपयोग कर रहा हूं। प्रत्येक पुनर्प्राप्त रिकॉर्ड के लिए मुझे 0 से 4 आइटम बनाने की आवश्यकता है, जिसे मैं डेटाबेस में जोड़ता हूं। तो कुल वस्तुओं की औसत राशि जो लगभग बनाई जानी है, लगभग 2 मिलियन है।बहुत सारी ऑब्जेक्ट्स बनाते समय स्मृति से बाहर C#
IQueryable<Object> objectCollection = dataContext.Repository<Object>();
int amountToSkip = 0;
IList<Object> objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
while (objects.Count != 0)
{
using (dataContext = new LinqToSqlContext(new DataContext()))
{
foreach (Object objectRecord in objects)
{
// Create 0 - 4 Random Items
for (int i = 0; i < Random.Next(0, 4); i++)
{
Item item = new Item();
item.Id = Guid.NewGuid();
item.Object = objectRecord.Id;
item.Created = DateTime.Now;
item.Changed = DateTime.Now;
dataContext.InsertOnSubmit(item);
}
}
dataContext.SubmitChanges();
}
amountToSkip += 250;
objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
}
अब आइटम बनाते समय समस्या उत्पन्न होती है। एप्लिकेशन चलाते समय (और डेटा कॉन्टेक्स्ट का उपयोग भी नहीं) स्मृति लगातार बढ़ती है। ऐसा लगता है कि वस्तुओं को कभी निपटान नहीं किया जा रहा है। क्या कोई ध्यान देता है कि मैं क्या गलत कर रहा हूं?
अग्रिम धन्यवाद!
आप अपनी ऑब्जेक्ट को कैसे प्रारंभ करते हैं? –
IQueryable
ऑब्जेक्ट चयन पर फिर से शुरू करने के बजाय आप 250 के बैच क्यों लेते हैं? – Jens