6

का कारण बनता है मेरे पास एक साइटकोर एप्लिकेशन है जहां मुझे किसी अन्य सिस्टम से लूप में बड़ी संख्या में साइटकोर आइटम बनाने की आवश्यकता है। नीचे मेरा परीक्षण उद्देश्य पाश है;साइटकोर आइटम्स की बड़ी मात्रा बनाना मेमोरी लीक

using (new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    for (int i = 0; i < 20000; i++) 
    { 
     Item newItem = MyTemplateItem.CreateItemFrom(DateTime.Now.Ticks.ToString(), myParentItem); 

     newItem.Editing.BeginEdit(); 
     newItem.Fields["Title"].Value = Guid.NewGuid().ToString(); 
     newItem.Editing.EndEdit(); 
    } 
} 

इस पाश चल रहा है जब और जब तक कार्य प्रबंधक में देख, प्रक्रिया स्मृति उपयोग समय के साथ बढ़ रही है।

साइटकोर Item कक्षा ने IDisposable इंटरफ़ेस लागू नहीं किया है, इसलिए मैं बनाए गए आइटम का फ़ाइनलाइज़र नहीं कह सकता।

मैं इस मेमोरी रिसाव से कैसे बच सकता हूं?

पीएस: मैं आईआईएस प्रक्रिया मेमोरी रिसाव को बाईपास करने के लिए इस ऑपरेशन को करने के लिए एक विंडोज़ एप्लिकेशन का उपयोग कर रहा हूं, जहां साइटकोर अपने कैश अपडेटिंग और इंडेक्स बिल्डिंग करता है जो इस प्रक्रिया के अंत में किया जाना चाहिए।

+0

क्या आप वाकई वास्तव में एक रिसाव हैं? आप एक ऐसा फ़ंक्शन कर रहे हैं जो स्मृति को आवंटित करना और लूप में ऐसा करना आवश्यक है। सिर्फ इसलिए कि प्रक्रिया मेमोरी बढ़ जाती है इसका मतलब यह नहीं है कि यह एक रिसाव है। क्या स्मृति कभी नीचे नहीं जाती है? – ddysart

+0

मुझे लगता है कि मेरी शब्दावली सही है, स्मृति बढ़ती जा रही है और यदि रैम भरा हुआ है, तो पीसी पुनरारंभ हो जाता है। यह एक स्मृति रिसाव है। मैंने लूप को लगभग एक घंटे तक निगरानी रखी है। –

उत्तर

3

आप अस्थायी रूप से आइटम निर्माण के दौरान डेटाबेस कैश अक्षम कर सकते हैं:

Sitecore.Configuration.Settings.Indexing.Enabled = false; 

कोशिश उन दो बातें जोड़ सकते हैं और अगर यह मदद करता है देखने के लिए:

using (new Sitecore.Data.DatabaseCacheDisabler()) 

आप का उपयोग निर्माण के दौरान अनुक्रमण अक्षम कर सकते हैं ।

अद्यतन: शायद यह काम करेगा। EndEdit() के बाद अपने पाश अंदर इस जोड़ें:

newItem = null; 

if (i % 100 == 0) 
{ 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
} 

यह अप्रयुक्त स्मृति हर बार 100 आइटम जोड़ दिया गया है को पुनः प्राप्त करने की कोशिश करना कचरा कलेक्टर बाध्य करेगा।

यदि यह काम करता है तो आपको वास्तव में जीसी को स्वयं कॉल नहीं करना पड़ता है, यह किसी बिंदु पर स्वचालित रूप से होता है, आपको बस पता नहीं होता है।

+0

उत्तर के लिए धन्यवाद। मैंने आपके सुझावों की कोशिश की, लेकिन मुझे स्मृति वृद्धि पर कोई बदलाव नहीं आया है। –

+0

मेरे उत्तर –

+0

पर एक और सुझाव जोड़ा गया है, सामान्य रूप से, आपको जीसी को कॉल करने से बचना चाहिए। इसकी एक बहुत ही सीपीयू गहन प्रक्रिया के बाद चयन करें जो पूरे ऐपपूल को अवरुद्ध कर देगा जबकि यह इसकी बात करता है। – ddysart

0

रुड का जवाब उससे बेहतर काम करता प्रतीत होता है। डेटाबेस कैश बिल्डिंग के कारण स्मृति की वृद्धि तेजी से बढ़ी थी। स्मृति वृद्धि में भारी कमी को अक्षम करके, लेकिन अभी भी विकास बहुत धीरे-धीरे है।

मैंने इसे प्राप्त करने के लिए निम्नलिखित कथन का उपयोग किया है;

using (new Sitecore.Data.DatabaseCacheDisabler()) 

newItem = null; // did not worked 

// replaced above line with the below 
Marshal.Release(Marshal.GetIUnknownForObject(newItem)); 

if (i % 100 == 0) 
{ 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
} 

सभी समर्थकों के लिए धन्यवाद!

0

यदि आप अपनी कैश सीमा को उच्च मानों (यानी बहुत अधिक) पर सेट करते हैं और जो भी कर रहे हैं, तो आप जो लक्षण रिपोर्ट कर रहे हैं उसे प्राप्त करना उचित लगेगा। आपकी स्क्रिप्ट चल रही है, जबकि पेज /sitecore/admin/cache.aspx को देखकर यह दिखाया जाएगा कि यह मामला है या नहीं। मैं छवि प्रविष्टियों master[items] और master[data] चढ़ाई पर रखेंगे ...

चाहते हैं, तो इस मामला है, बस एक कम कैश सीमा कैश मतलब होगा की स्थापना जो एक स्वस्थ तरीका रखने के लिए लगता है के रूप में की जरूरत खाली किया जाता है, नियंत्रण में चीजें।

इसके अलावा

, अगर आप नाटकीय रूप से कार्यक्रम संबंधी वस्तु निर्माण में तेजी लाने के, शायद

using (new BulkUpdateContext()) { code.. }

ऐसा नहीं है कि BulkUpdateContext() भी कैश में जोड़ने से आइटम को छोड़ देता है संभव है का उपयोग करके देखें चाहता हूँ - मैं इस करता है, तो जांच न की हो मामला है, लेकिन यदि ऐसा है, तो यह भी आपके पास स्मृति समस्या को ठीक करने की संभावना होगी।

(this SO answer भी देखें)। ध्यान दें कि यह कई पाइपलाइनों को अक्षम करता है।

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