हमारे पास कुछ प्रकार का रिसाव है, जिसकी प्रकृति मुझे समझ में नहीं आती है। Gen0/1/2 ढेर आकार में वृद्धि नहीं करते हैं, हालांकि हम ओम तक कार्य सेट बढ़ते हैं।फ़ाइनलाइज़र कतार बढ़ रहा है लेकिन प्रबंधित हेप्स
DebugDiag मुझसे कहता है कि CLR.DLL बढ़ती स्मृति का मालिक है और भी मुझसे कहता है कि हमारे पास एक बढ़ती finalizer कतार - Texture2D (अपने एक XNA एप्लिकेशन) वस्तुओं जो समय के साथ वृद्धि के हजारों की 100s .. हालांकि कोई प्रोफाइलर (dotTrace , चींटियों, सीएलआर प्रोफाइलर) इन वस्तुओं को पा सकते हैं - वे ढेर में नहीं दिखते हैं और सीएलआरप्रोफाइलर का दावा है कि उन्हें कभी आवंटित नहीं किया जाता है।
तो मैं WinDbg में देखता हूं - एक बार फिर मैं Texture2D से भरा बढ़ती फाइनलाइज़र कतार देख सकता हूं। fReachable खाली है और यह दावा करता है कि उन सभी वस्तुओं को वैसे भी ढेर पर हैं।
*0:038> !finalizequeue
SyncBlocks to be cleaned up: 0
MTA Interfaces to be released: 0
STA Interfaces to be released: 0
----------------------------------
generation 0 has 1881 finalizable objects (33e365b0->33e38314)
generation 1 has 41580 finalizable objects (33e0dc00->33e365b0)
generation 2 has 685816 finalizable objects (33b70020->33e0dc00)
Ready for finalization 0 objects (33e38314->33e38314)
MT Count TotalSize Class Name
......snip......
00ce67e0 726827 49424236 Microsoft.Xna.Framework.Graphics.Texture2D*
फिर मैं उन 726,000 उदाहरणों को देखता हूं ताकि मैं उन्हें ढूंढ सकूं जो उनका मालिक है। समस्या यह है कि डंपीप कहते हैं कि केवल 218 है। मैं जो अपेक्षा करता हूं वह बहुत अधिक है और प्रबंधित प्रोफाइलर्स मुझे क्या बताते हैं।
*0:038> !dumpheap -stat -type Microsoft.Xna.Framework.Graphics.Texture2D
total 0 objects
Statistics:
MT Count TotalSize Class Name
00ce67e0 218 14824 Microsoft.Xna.Framework.Graphics.Texture2D
Total 218 objects*
तो फाइनेंजर कतार पर शेष आइटम कहां से आ रहे हैं? अभी मुझे स्मृति आवंटन के लिए बढ़ती फाइनलाइज़र कतार पर संदेह है क्योंकि यह बढ़ता है और इसलिए ओओएम बाहर निकलता है। ऐसा लगता है कि कुछ कारणों से उन 218 आइटम को अंतिम बार कतार में कई बार जोड़ा जा रहा है।
बहुत धन्यवाद
एंडी
आप gen0/1/2 ढेर का जिक्र करते हैं, लेकिन बड़ी वस्तुओं के ढेर के बारे में क्या? क्या यह स्थिर है? आम तौर पर लोगों को "ढेर के आकार" से क्या मतलब है? क्या यह ढेर के सभी वस्तुओं का संयुक्त आकार है, या ढेर के लिए आरक्षित स्मृति का आकार है? अगर विखंडन उच्च है, तो ये दो मान अलग हो सकते हैं। – Joh
हाँ यह उल्लेख करने के लिए खेद है कि LOH भी सभी ढेर काउंटर में बाइट्स के रूप में बहुत स्थिर है। आम तौर पर मैं आकार के लिए परफॉर्म काउंटर के बारे में बात कर रहा हूं। जब मैंने सीएलआर प्रोफाइलर से पता लेआउट देखा तो LOH बहुत खंडित नहीं है और इसका समग्र आकार बढ़ रहा नहीं है। लेकिन मैं वापस जाऊंगा और जांच करूँगा। धन्यवाद –