AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C++ Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

Offene Frage von "Zacherl"
Ein Thema von Michaell · begonnen am 12. Mär 2018 · letzter Beitrag vom 15. Mär 2018
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 13. Mär 2018, 13:55
Was warum auch immer mit dem TBitmap bei mir zur genannten Fehlermeldung führt kann ich nicht ergründen, denn selbst wenn die Fehlermeldung nicht kommt habe ich laut Task Manager nur 265 MiB Speicher belegt.
Der Grund (Speicher-Fragmentierung) wurde doch schon mehrmals genannt?

Wenn du in 2 GB Prozessspeicher alle 200 MB je 1 Byte speicherst, dann hast du 10 Byte belegt.
OK, eigentlich 41 KB, da Windows den Speicher in 4 KB-Blöcken vewaltet.

Obwohl also nur 41 KB belegt sind, hast du dennoch keine Chance dort einen freigen zusammenhängenden Block mit 300 MB zu finden.



Belegt und Verwendet ist auch ein Unterschied. Du kannst 400 MB Speicher reservieren, aber wenn dort nicht reingeschrieben wurde (alles mit Nullen gefüllt), dann ist dieser Speicher nicht belegt.

Wie ebenfalls schon genannt wurde, hat der Taskmanager unterschiedliche Anzeigen für "belegten" Speicher. (es gibt noch viel mehr Spalten, die man sich da anzeigen lassen kann)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Mär 2018 um 13:58 Uhr)
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#2

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 13. Mär 2018, 14:16
Der Grund (Speicher-Fragmentierung) wurde doch schon mehrmals genannt?
Ja, nur das ich daran seit meinem Umsortieren der Forms nicht mehr Glaube! (Ich schreibe nichts von Wissen.)

Zum Task Manager (Windows 7): Der Wert von 265 MiB stammt vom Reiter 'Processes', Spalte 'Memory (Private Working Set)'. Eine andere Stelle kenne ich nicht, auch nicht Optionen um das zu ändern.

Geändert von Michaell (13. Mär 2018 um 14:16 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#3

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 13. Mär 2018, 14:20
... Eine andere Stelle kenne ich nicht, auch nicht Optionen um das zu ändern.
OK, hab die Optionen gefunden. Mal sehn ob sich damit etwas mehr Information gewinnen läßt.

Geändert von Michaell (13. Mär 2018 um 14:20 Uhr) Grund: Korrektur
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#4

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 13. Mär 2018, 16:50
OK, hab die Optionen gefunden. Mal sehn ob sich damit etwas mehr Information gewinnen läßt.
Ich habe nun drei neue "Memory" Spalten im Task Manager, die neue max. angezeigte Speichergröße ist ca. 300 MiB und aus Spalte Peak Working Set (Memory) entnommen. Nach wie vor sieht man keine großartige Speicherbelegung. Ist mir aber auch egal, der Fehler tritt nicht mehr auf und ich will keine weitere Zeit dazu spendieren.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 14. Mär 2018, 09:41
Es geht ja nicht darum, wieviel Speicher insgesamt zur Verfügung steht, sondern wieviel Speicher an einem Stück zur Verfügung steht. Wenn du zwar 2 Gb frei hast, aber alle 20 MB mal ein paar Byte stehen, bekommst du nie 300 MB am Stück unter. Da kannst du dich drehen und wenden soviel du willst. Dass es jetzt vielleicht funktioniert, heisst noch lange nicht, dass es dauerhaft funktioniert. Einmal Neustarten, 3-4 Programme starten und schon sieht die Speicherfragmentierung wieder ganz anders aus.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 14. Mär 2018, 13:19
Es wurde ja bereits verkündet das meine Idee mit Speicher füllen falsch sei, ich habe es so getestet:

Delphi-Code:
Code:
procedure MyTrimWorkingSet;
var hProcess: THandle;
begin
 hProcess := OpenProcess(PROCESS_SET_QUOTA, false, GetCurrentProcessId);
 try
  SetProcessWorkingSetSize(hProcess, $FFFFFFFF, $FFFFFFFF);
 finally
  CloseHandle(hProcess);
 end;
end;
Könnte mir bitte jemand sagen was daran falsch sei damit ich es endlich Verstehe?
Ist es die Funktion oder das Prinzip an sich das ich es total falsch verstehe, bin ratlos.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Michaell

Registriert seit: 17. Aug 2015
Ort: Bayern
47 Beiträge
 
Turbo C++
 
#7

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 14. Mär 2018, 13:44
Es geht ja nicht darum, wieviel Speicher insgesamt zur Verfügung steht, sondern wieviel Speicher an einem Stück zur Verfügung steht. Wenn du zwar 2 Gb frei hast, aber alle 20 MB mal ein paar Byte stehen, bekommst du nie 300 MB am Stück unter. Da kannst du dich drehen und wenden soviel du willst. ...
Geht es noch, ja? Die Theorie mit dem fragmentierten Speicher kann hier gern so oft wiederholt werden bis sie richtig ist (das ich die verstanden habe geht aus meinen anderen Antworten hervor). Wenn ich trotz des angeblich ach so "riesigen Bitmaps (ca. 300 MiB war die letzte Abschätzung)" nur insgesamt 300 MiB belege (natürlich mit dem Bitmap) dann brauche ich wohl kaum ein weiteres zusammenhängendes 300 MiB Stück (für das Bitmap).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.561 Beiträge
 
Delphi 12 Athens
 
#8

AW: Fehler: Für diesen Befehl ist nicht genügend Speicher verfügbar.

  Alt 13. Mär 2018, 15:08
Alter Taskmanager (Win XP/7) im Menü Ansicht
und beim Neuen Windows 8/10 im Kontextmenü der Gridspalten.

Zitat:
Ja, nur das ich daran seit meinem Umsortieren der Forms nicht mehr Glaube!
Und warum nicht?

Werden die anderen Forms erst danach erstellt, dann verteilen sie ihren Speicher auch nicht vorher und sorgen so eventuell für ein Belegen des großen Speicherblocks.
Nachher passen aber deren viele kleinen Speicherblöcke in die verbliebenen Lücken.

ABER, dass bedeutet nicht, dass vorher nicht schon durch was Anderes der Speicher schon zu sehr fragentiert sein kann.
z.B. neue DLLs in neueren Windowsen und dann bringen auch Zusatzprogramme, wie z.B. Drucker-, Monitor-Treiber, TeamViewer, Skype usw. ihre DLLs in alle fremden Prozesse, also auch in deine Anwendung und schwupps, schon kann es plötzlich wieder nicht mehr funktionieren, egal ob deine Forms danach sind, weil schon viele Anderes unvorhersehbar vorher abläuft.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz