Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Für diesen befehl ist nicht genügend Speicher verfügba... (https://www.delphipraxis.net/42712-fuer-diesen-befehl-ist-nicht-genuegend-speicher-verfuegba.html)

NBG 22. Mär 2005 23:17


Für diesen befehl ist nicht genügend Speicher verfügba...
 
Diese fehlermeldung bekomme ich nachdem ich 2000 Klassen erzeugt habe! was kann ich tuen, wenn ich nochmehr Klassen erzeugen möchte? Denn systemspeicher steht noch zur verfügung! denn müsste ich doch eigendlich noch mehr erzeugen können oder? Gab es nicht unter Delphie nei einstellung, womit die Maximale Speichergröße für ein Programm festgelegt werden kann?

Luckie 23. Mär 2005 00:19

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
2000 Klassen? :shock: Das ist jetzt aber ein Scherz oder? Am fehlenden Systemspeicher wird es bestimmt nicht liegen. Eher wohl daran, dass jeder Prozess unter Windows nur 2 GB Adressraum hat.

Ich würde mal überlegen, ob du nicht etwas schonender mit den Ressourcen umgehen könntest. :roll:

Phoenix 23. Mär 2005 07:11

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Zitat:

Zitat von NBG
nachdem ich 2000 Klassen erzeugt habe!

:roll: Du hast allerhöchstens 2000 Objekte instanziert. Man sollte wenigstens bei den richtigen Begrifflichkeiten bleiben.

Bernhard Geyer 23. Mär 2005 07:11

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Zitat:

Zitat von NBG
Diese fehlermeldung bekomme ich nachdem ich 2000 Klassen erzeugt habe! was kann ich tuen, wenn ich nochmehr Klassen erzeugen möchte? Denn systemspeicher steht noch zur verfügung! denn müsste ich doch eigendlich noch mehr erzeugen können oder? Gab es nicht unter Delphie nei einstellung, womit die Maximale Speichergröße für ein Programm festgelegt werden kann?

Es gibt unter Projektoptionen/Linker einstellmöglichkeiten bezüglich des Stacks.
Aber was machst Du in deinen Klassen? Also ich arbeite hier teilweise mit 100.000 und mehr Klassen-Instanzen. Oder meinst Du mit 2000 Klassen wirklich 2000 unterschiedliche Klassentypen und nicht nur Klasseninstanzen?

NBG 23. Mär 2005 15:39

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Ihr habt natürlich recht! Ich erzeuige 2000 Klassenistanzen.

Ich erkläre euch mal genauer was ich vor habe:
Ich habe eine TThreadList und eine Schleife in der ich laufend Thread Klassen einfüge, die widerum ein
TIdIcmpClient erzeugen, der die in der schleife hochgezählte Zahl als eine IP umwandelt und Anpingt. Ist der Host erreichbar wird die IP in eine Liste eingefügt. Ziel ist, daß ich mir aufliste, welche Hosts in meinem Netzwerk online sind. Ich wa schon erstaunt das er es geschaft hat in der schleife 2000 Threads zu erzeugen! Ich hatte sowas ähnliches nämlich schon mal unter win 98 programiert und da ist er bei mehr als 20 Laufenden Threads abgestürtst.
unter XP machter 2000??? vieleicht habt ihr diesbezüglich auch eine idee, wiso das unter XP möglich ist. Vieleicht habe ich auch unter 98 irgend ein buck gehabt, kann auch sein.
Die einstellungen im stack habe ich im übrigen auch schonmal geändert! ich habe die doppelte größe für Maxsize angegeben, mit dem erstaunlichen ergebnis, das nun nicht doppelt soviel sondern nur die hälfte an Instanzen erzeugt worden sind. Scheint also so, als werden die nicht auf dem Stack gelegt. Der Stack scheint mir soga Speicher zu rauben. Ich habe mal mit dem Tool Rambooster, anzeigen lassen, wieviel Ram die Instanzen kosten, und es sind ca 64 MB und es ist bei meiner Ram größe von 512 MB noch einiges frei. Also wie kann ich nochmer Instanzen erzeugen?
Thx!!!

Dust Signs 23. Mär 2005 16:21

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Das ist ein Scherz, oder? Ich hab da von einer Klasse gehört, die sich TListBox nennt und eine, die TListView heißt; und beide können 2000 IPs speichern, ohne dass man dazu 2000 Labels braucht :shock:

Dust Signs

himitsu 23. Mär 2005 16:22

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Du könntest natürlich die Threads (wo anscheinend diese Klassen drin sind) auf mehrere Anwendungen verteilen.
Also z.B. startet dein Programm sich selber nochmal und übergibt dann die ensprechenden Parameter...

NBG 23. Mär 2005 16:33

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
@Dust Signs

Hä?

Zitat:

Ist der Host erreichbar wird die IP in eine Liste eingefügt
1. von einem Label wa nie die Rede, sondern von einer Liste (Ein Memo um ganz genau zu sein)
2. nicht alle 2000 sondern nur die die online sind! in besagtem testfall NUR 2
3. Löst es leider nicht mein problem :-(

@himitsu

ja is vieleicht möglich, erscheint mir aber nicht als sehr schöne lösung :-(
da würde ich das dann ehr auf 2000 Threads beschränken, fall hier keine weiteren lösungen erscheinen :..(

himitsu 23. Mär 2005 16:35

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Testet jeder Thread etwa eine IP?

Wenn ja, dann mach weinger und gehe die IP's nacheinander durch, da ja eh nicht unendlich Nettwerkverbindungen geöfnet sein können.

Binärbaum 23. Mär 2005 18:15

Re: Für diesen befehl ist nicht genügend Speicher verfügba..
 
Ich würde dir auch raten, die Anzahl der Threads zu verringern. Bei 2000 Threads gibt es genug Overhead, da das OS ständig zwischen den einzelnen Threads wechseln muss.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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