मैं कुछ परीक्षण चला रहा था, यह देखने के लिए कि मेरा लॉगिंग कैसे करेगी File.AppendAllText
करने के बजाय मैं पहले मेमोरी स्ट्रीम को लिखूंगा और फिर फ़ाइल में कॉपी करूंगा। तो, बस देखने के लिए कितनी तेजी से स्मृति ऑपरेशन है मैं इस किया था ..मुझे 700 एमबी रैम मुक्त होने पर भी सिस्टम.ऑटऑफ मेमरी अपवाद क्यों मिलता है?
private void button1_Click(object sender, EventArgs e)
{
using (var memFile = new System.IO.MemoryStream())
{
using (var bw = new System.IO.BinaryWriter(memFile))
{
for (int i = 0; i < Int32.MaxValue; i++)
{
bw.Write(i.ToString() + Environment.NewLine);
}
bw.Flush();
}
memFile.CopyTo(new System.IO.FileStream(System.IO.Path.Combine("C", "memWriteWithBinaryTest.log"), System.IO.FileMode.OpenOrCreate));
}
}
जब i
पहुँच 25413324
मैं एक Exception of type 'System.OutOfMemoryException' was thrown.
मिला भले ही मेरी Process Explorer कहता है कि मैं से मुक्त राम 700MB के बारे में है ??? अधिक वस्तुओं की खातिर बनाया जा रहा:
यहाँ स्क्रीन शॉट्स (सिर्फ मामले में)
प्रोसेस एक्सप्लोरर
यहाँ WinForm
संपादित है कर रहे हैं ढेर पर, मैं bw.write
को इस
bw.Write(i);
उत्तर के अनुसार, 'बाइनरीवाइटर' संख्या के स्ट्रिंग प्रस्तुति को नहीं लिखता है। यह बाइट प्रतिनिधित्व लिखेंगे। शायद आप उत्तरार्द्ध चाहते हैं, लेकिन मूल कोड से ऐसा नहीं दिखता है। – leppie