16 जीबी रैम के साथ विंडोज सर्वर 2008 x64 पर एक .NET अनुप्रयोग चला रहा है। इस एप्लिकेशन को बहुत बड़ी मात्रा में डेटा (लगभग 64 जीबी) लाने और विश्लेषण करने की आवश्यकता है, और इसे एक ही समय में स्मृति में रखें।.NET कचरा कलेक्टर और x64 वर्चुअल मेमोरी
मुझे क्या देखने की उम्मीद है: प्रक्रिया का आकार पिछले 16 जीबी से 64 जीबी तक फैलता है। विंडोज़ आवश्यकतानुसार डिस्क से अतिरिक्त डेटा को पृष्ठ पर वर्चुअल मेमोरी का उपयोग करता है। यह क्लासिक वर्चुअल मेमोरी उपयोग केस है।
जो मैं वास्तव में देखता हूं: प्रक्रिया का आकार भौतिक स्मृति (16 जीबी) की मात्रा तक ही सीमित है। आवेदन कचरा कलेक्टर में अपने समय का 99.8% खर्च करता है।
हमारा एप्लिकेशन वर्चुअल मेमोरी का उपयोग करने में विफल क्यों है? क्या यह .NET कचरा कलेक्टर की कॉन्फ़िगरेशन में या Windows x64 वर्चुअल मेमोरी मैनेजर में एक समस्या है? भौतिक स्मृति तक सीमित होने के बजाय वर्चुअल मेमोरी का उपयोग करने के लिए हमारे आवेदन को प्राप्त करने के लिए मैं क्या कर सकता हूं?
धन्यवाद।
- ब्रायन
अद्यतन:
using System;
namespace GCTest
{
class Program
{
static void Main()
{
byte[][] arrays = new byte[100000000][];
for (int i = 0; i < arrays.Length; ++i)
{
arrays[i] = new byte[320];
if (i % 100000 == 0)
{
Console.WriteLine("{0} arrays allocated", i);
System.Threading.Thread.Sleep(100);
}
}
}
}
}
यदि आप इसे करने की कोशिश करना चाहते हैं, 64 के लिए निर्माण करने के लिए सुनिश्चित करें: मैं एक बहुत छोटे से प्रोग्राम है जो एक ही व्यवहार दिखाता लिखा है। आपको अपने सिस्टम को तनाव देने के लिए स्थिरांक को थोड़ा सा संशोधित करना पड़ सकता है। मैं जो व्यवहार देखता हूं वह यह है कि प्रक्रिया 16 जीबी के आकार तक पहुंच जाती है। कोई त्रुटि संदेश या अपवाद फेंक दिया गया है। प्रदर्शन मॉनिटर रिपोर्ट करता है कि जीसी में सीपीयू समय का% 100% तक पहुंचता है।
क्या यह अस्वीकार्य नहीं है? वर्चुअल मेमोरी सिस्टम कहां है?
प्रक्रिया का आकार निर्धारित करने के लिए आप क्या उपयोग कर रहे हैं? (आइए बस पहले आसान विकल्पों को खत्म करें :)) – Paolo
विंडोज टास्क मैनेजर से "कमिट आकार"। प्रदर्शन मॉनिटर में "# कुल प्रतिबद्ध बाइट्स" का भी उपयोग करना। मुझे पूरा यकीन है कि मैं अपने भौतिक कामकाजी सेट की बजाय प्रक्रिया के वर्चुअल मेमोरी आकार को माप रहा हूं। – brianberns
क्या मैं स्पष्ट पूछ सकता हूं? क्या आपको _really_ को यह सब एक बार में स्मृति में लोड करने की आवश्यकता है? क्या यह एक और दृष्टिकोण लेना संभव है और अपने आप पर कुछ प्रकार के मैन्युअल पेजिंग करना संभव है? – CodingGorilla