System.OutOfMemoryException

07/04/2010 - 13:23 von Andreas Schädler | Report spam
Hallo NG

Habe irgen ein Memoryproblem, welches ich nicht verstehe.

Folgende Codezeile führt zu der Exeption:
Dim temp As New Text.StringBuilder(CInt(stream.Length))
Stream.length ist 280'582'045 vom Typ IO.MemoryStream
Erlaubt ist 2'147'483'648

Betriebsystem Windows 2008 Server 32bit mit 4GB RAM.
(Ja ja ich weiss, macht nicht viel Sinn, ist aber so)
Zum Zeitpunkt der Ausführung dieser Codezeile ist 1'300 MB Physikalisch
Speicher verfügbar. Da sollte wohl Platz für 300 MB sein?

Was bring ich da durcheinander?

Danke und Gruss
Andreas
 

Lesen sie die antworten

#1 Thomas Scheidegger
07/04/2010 - 13:36 | Warnen spam
Hallo Andreas

New Text.StringBuilder(CInt(stream.Length))
Stream.length ist 280'582'045
...1'300 MB Physikalisch Speicher verfügbar.
Da sollte wohl Platz für 300 MB sein?



.NET Strings sind immer in Unicode ('UTF-16'),
belegen also mindestens 2 Bytes pro Zeichen,
macht also eher ~600MB.
Nun, das Hauptproblem dürfte da unter 32-Bit OS sein,
dass diese 600MB nicht mehr 'an einem Stück'
alloziert werden können,
wegen der 32-Bit 'Addressraum-Fragmentierung'.
(deine freie 1'300 MB sind mehrere Teile zusammengerechnet)

Da dieses Problem sehr unterschiedlich von Rechner zu Rechner ist
und hoch-dynamisch,
kann fast nicht vorhersehen wieviele MB wirklich am Stück allozierbar sind!
Daher stelle sicher dass du mit kleineren Instanzen arbeiten kannst.
Ansonst gibts nur 64Bit OS (+.NET App in 64-Bit)



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen