मेरा छोटा तनाव परीक्षण, जो एक लूप में यादृच्छिक लंबाई सरणी (100..200 एमबी प्रत्येक) आवंटित करता है, 64 बिट Win7 मशीन पर और 32 बिट एक्सपी (वीएम में) पर अलग व्यवहार दिखाता है। दोनों प्रणालियां आम तौर पर एलओएच में फिट होने के रूप में अधिकतर सरणी आवंटित करती हैं। फिर जब तक आभासी पता स्थान भर नहीं जाता है तब तक LOH बड़ा और बड़ा हो जाता है। अब तक अपेक्षित व्यवहार। लेकिन आगे के अनुरोधों के मुकाबले - दोनों अलग-अलग व्यवहार करते हैं:.NET प्रबंधित ढेर कब और कैसे बदल रहा है?
Win7 पर एक आउटऑफमेमरी एक्सेप्शन (ओओएम) फेंक दिया जाता है, एक्सपी पर ऐसा लगता है कि ढेर बढ़ जाता है और डिस्क पर भी बदल जाता है - कम से कम कोई ओओएम फेंक दिया नहीं जाता है। (पता नहीं, अगर इसे वर्चुअल बॉक्स में चल रहे XP के साथ करना पड़ सकता है।)
प्रश्न: रनटाइम (या ओएस?) कैसे तय करता है, प्रबंधित स्मृति आवंटन अनुरोधों के लिए, चाहे यह बहुत बड़ा हो आवंटित करने के लिए, ओओएम उत्पन्न होता है या बड़े ऑब्जेक्ट ढेर में वृद्धि हो रही है - अंततः डिस्क पर भी बदल दिया जाता है? यदि यह स्वैप किया गया है, तो ओओएम कब से होता है?
आईएमओ यह प्रश्न सभी उत्पादन वातावरण के लिए महत्वपूर्ण है, संभावित रूप से बड़े डेटासेट से निपटना। किसी भी तरह से यह जानने के लिए और अधिक "सुरक्षित" लगता है, सिस्टम ओओएम फेंकने की तुलना में ऐसी परिस्थितियों में (स्वैप करके) नाटकीय रूप से धीमा हो जाएगा। कम से कम, यह किसी भी तरह निर्धारक रूप से होना चाहिए, है ना?
@Edit: अनुप्रयोग एक 32 बिट आवेदन,
"भौतिक पता स्थान तक" क्या आपका मतलब उस प्रक्रिया का आभासी पता स्थान नहीं है? – CodesInChaos
और क्या आपका प्रोग्राम किसी भी सीसीपीयू या 32 बिट पर सेट है? 64 बिट प्रोग्राम में यादों में से आसानी से नहीं होना चाहिए। मैं उम्मीद करता हूं कि कंप्यूटर इससे पहले लंबे समय तक स्वैपिंग के कारण रुक जाए। – CodesInChaos
आप सही हैं: "वर्चुअल एड्रेस स्पेस" का मतलब था। और हां, प्रॉग 32 बिट एप्लिकेशन के लिए संकलित करता है, Win7 पर WOW चला रहा है। – user492238