warum bekomme ich System.OutOfMemoryException, selbst wenn es über 700Mb freien RAM?

Ich lief einige Tests, um zu sehen, wie meine Protokollierung führen würde, ist statt File.AppendAllText ich würde zuerst schreiben, um einen memory-stream und klicken Sie auf in Datei kopieren. So, nur um zu sehen, wie schnell der Speicher-Betrieb ist, ich habe diese..

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));
        }
    }

Wenn i erreicht 25413324 bekam ich einen Exception of type 'System.OutOfMemoryException' was thrown. obwohl mein Process Explorer sagt, ich habe über 700 MB freien ram???

Hier sind die screenshots (nur für den Fall)

Process Explorer
warum bekomme ich System.OutOfMemoryException, selbst wenn es über 700Mb freien RAM?

Hier ist der winform -

warum bekomme ich System.OutOfMemoryException, selbst wenn es über 700Mb freien RAM?

EDIT : zuliebe mehr Objekte erstellt werden, der auf Haufen, und ich schrieb die bw.write dieser

bw.Write(i);
  • Als pro Antwort, die BinaryWriter schreibt nicht aus der string-Repräsentation der Zahl. Es schreibt die byte-Darstellung. Vielleicht will man das letztere, aber aus dem ursprünglichen code ist, erscheint es nicht so.
InformationsquelleAutor Razort4x | 2013-03-28
Schreibe einen Kommentar