ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
866
866
EMPFEHLEN
-
Hallo,
ich habe unter XP Probleme mit ReDim mehr als 800 MB zu reservieren, obwohl laut Taskmanager über 2 GB verfügbar sind. Der RAM beträgt 3 GB und die Gesamtkapazität mit Auslagerungsdatei ca 5 GB. Bei ca 750 MB funktioniert dies.
Der Quelltext sieht etwa so aus:
Dim x() as single
Redim x(225000000) 'entspricht 858,3 MB bei Single=4Byte
Woran kann es liegen?
Gruß
flowpow
-
Hi
ein Array wird immer so angelegt,
dass alle Elemente ohne Unterbrechung hintereinander kommen.
Wenn zB. 2GB insgesamt frei sind, kanns ja so sein:
100MB frei, 20MB besetzt, 400MB frei, 120MB besetzt usw...
Der freie Speicher bezieht sich auf die Summe aller freien Teile.
Um alles mit einem Array füllen zu können,
müsste es aber ein großer zusammenhängender Freibereich sein.
Bis zu einem gewissen Grad kann das bei Bedarf vom Betriebssystem umgeschichtet werden,
aber auch nicht unbegrenzt.
Wenn du alles ausnutzen willst, mach mehrere kleine Arrays und teil die Elemente auf.
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Hallo sheel,
nach einem Neustart dürfte der Hauptspeicher eigentlich nicht fragmentiert sein, trotzdem bekomme ich nicht genügend Speicher reserviert. Wenn ich den Speicherbedarf aufteile, z.B. 3 x 300 MB, so wird mir dieser auch zugeteilt, bei 4 x 300 MB funktioniert dies schon nicht mehr, obwohl über 2 GB physikalischer Speicher zur Verfügung steht. Leider benötige ich den Speicher en bloc, sodass ich im Moment nur meine zu verarbeitenden Datenmengen reduzieren muss.
Ich habe mir mal eine Beschreibung zur C-Funktion VirtualAlloc angeschaut. Beim ersten Aufruf dieser Funktion wird zunächst ein Speicherblock reserviert und mit weiteren Aufrufen für Teile (Speicherseite) dieses Blockes auch physikalischer Speicher zugewiesen. Dies kann zum Beispiel für die 3. und 5. Speicherseite erfolgen, bevor dort Daten abgelegt werden. Wenn ein Speicherblock aber nicht fragmentiert sein darf, würde diese Möglichkeit der Zuweisung doch keinen Sinn machen, oder? Da die Funktion ja nicht wissen kann, ob ich jetzt die Speicherseiten 3 bis 5 en bloc brauche oder die Speicherseiten 4 bis 7, dürfte die Zuweisung von physikalischen Speicher nur für den ganzen reservierten Speicherblock möglich sein.
Viele Grüße
flowpow
-
hihi = -h²
-
21.12.11 08:22 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Kann es sein, dass du dein Programm im Debug Modus ausführst?
Lass es mal ohne Debugging laufen. Siehe http://social.msdn.microsoft.com/For...-0befe95e915e/
Max. Arraygröße auf meiner Maschine (XP 32bit, .NET 3.5):
mit debugging: 760 MiB
ohne: 1248 MiB
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
-
Ähnliche Themen
-
Redim ohne löschen der Werte
Von fredlllll im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 06.04.10, 17:11 -
Not enough Memory
Von headghot im Forum Cinema 4DAntworten: 1Letzter Beitrag: 07.03.10, 14:47 -
Redim
Von eyyyyy im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 02.07.08, 14:12 -
Redim Preserve funktioniert nicht
Von dignsag im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 08.05.06, 17:06 -
VB: ReDim Preserve arrey() will nicht so wie ich will
Von mashine-obf im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 16.11.05, 10:02





Zitieren


Login





