1.ARRAY's dynamisch? 2.THREAD's bewirken Absturz

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Gerhard
Beiträge: 37
Registriert: 29.09.2004 23:44
Wohnort: Zedtwitz

1.ARRAY's dynamisch? 2.THREAD's bewirken Absturz

Beitrag von Gerhard »

Hallo,
1.ARRAY's:
Sind eigentlich Arrays wie z.B. DIM beispiel.s(500000) dynamisch oder
statisch? Belegen sie schon beim Dimensionieren den vollen Speicher-
platz?

2.THREAD's:
Habe 3 Prozeduren als THREAD umgewandelt bzw. laufen lassen.
Die Verarbeitung dauert ohneTHREAD etwa 2-3 Sekunden pro
Prozedur. Wenn man mit einem langsameren 500MHz Rechner
schnell zwischen den Prozeduren hin und herschaltet, kommt es
zum Absturz des Programmes, besonders beim 500 MHz Rechner.
Bei einem anderen, schnelleren Rechner stellte ich fest, dass das
schnellere Hin- und Herschalten kaum zum Absturz führte.
Kann man für langsamere Rechner da was ändern? Vermutlich
ist der eine Thread noch nicht ferig, wenn man schon den nächsten
startet.

Gruß
Gerhard
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Zu 1)
Arrays nehmen direkt soviel Speicher in Anspruch, wie du von ihnen verlangst. Das heißt, dass [c]beispiel.s(500000)[/c] auch direkt [c]500.000 * 4 Bytes = 2.000.000 Bytes[/c] verbrauchen. Schreibst du jetzt einen String an eine Stelle, wird der benötigte Speicher für den String noch einmal extra allokiert.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Belegen sie schon beim Dimensionieren den vollen Speicher-
platz?
Jupp, die brauchen gleich den vollen Platz. Wenn du also zu viel Speicher reservieren willst, mehr als vorhanden ist, wird das Programm mit Sicherheit abstürzen. ;)
Benutzeravatar
redacid
Beiträge: 581
Registriert: 29.08.2004 17:06

Beitrag von redacid »

Sunny hat geschrieben:
Belegen sie schon beim Dimensionieren den vollen Speicher-
platz?
Jupp, die brauchen gleich den vollen Platz. Wenn du also zu viel Speicher reservieren willst, mehr als vorhanden ist, wird das Programm mit Sicherheit abstürzen. ;)
Warum sollte es abstürzen? Es gibt doch virtuellen Speicher. Das Programm würde dadurch nur (vergleichsweise) elendig langsam werden.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Naja, ich hab mal 4 Gb reservieren wollen durch eine Array-Dimensionierung, und daraus wurde nichts.^^
Ich hab ja nicht explizit geschrieben, dass man nur so viel nehmen kann, wie man RAM hat, sondern wenn der Speicher voll ist, also da ist der virtuelle schon drinne. ;)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Zeig doch mal das Programm mit den Threads, dann lässt sich's einfacher analysieren.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
tranquil
Beiträge: 117
Registriert: 22.09.2004 22:07
Kontaktdaten:

Beitrag von tranquil »

Hallo Gerhard!

Kann es sein das Du in Deinem Threads String-Operationen benutzt?
Dann wäre das Problem schon erkannt.

Mike
Benutzeravatar
Gerhard
Beiträge: 37
Registriert: 29.09.2004 23:44
Wohnort: Zedtwitz

Beitrag von Gerhard »

An Mike:
Ja, ich mache Stringoperationen mit den Threads und lese und
schreibe ach Strings in den Speicher direkt ein, hmm, also dann
wird das nicht gehen. Naja ich habe zurZeit etwa 16200 QSO's=
Datensaetze in meinem Logbuch (Amateurfunk), dann ist
alles klar, danke . Ich werde die Threads rausschmeissen und
haltfür die 2-3 Sekunden einen Hinweis bringen (Please wait) oder
so.
Danke auch an alle anderen für die Antwort nach Punkt 1.
Also der Speicher wird schon gleich verbraucht. Ich war mir auch
nicht sicher, denn unter Windows 2000 hatte ich mal bei offenem
Taskmanager, der gleich online den Speicherverbrauch anzeigt
500000 Strings ddiensioniert. Es war aber kein Speicherverbrauch
zu sehen. Dann füllte ich mit einer Schleife alle 500000 Elemente
mit je einem 200 Zeichen langen String auf. Erst jetzt war sofort
zu erkennen, dass etwa 110 MB vom Speicher weg waren.
Hmmmm....

An freedimension:
Mein Programm ist leider schon zu gross, um es hier auch nur
auszugsweise zu listen. Aber ich schmeisse die Threads raus,
dann gehts nämlich ganz ordentlich.


Danke Euch allen

Gruss
Gerhard
tranquil
Beiträge: 117
Registriert: 22.09.2004 22:07
Kontaktdaten:

Beitrag von tranquil »

Threads sollten nach möglichkeit immer gemieden werden. Nur da wo es absolut nicht anders geht.

Wenn soviele Datensätze vorhanden sind macht vielleicht eine LinkedList mehr sinn!? Da geht nicht soviel Speicher bei drauf und das Handling ist auch leichter.

Abfragen auf Deine "Datenbank" sollten vielleicht auch direkt über ein richtiges DBMS (DatenbankManagemantSystem) gemacht werden. Beispielsweise mit MySQL und ein paar SQL Queries.
Wenn man noch nie damit gearbeitet hat ist es anfangs vielleicht etwas mühsam, dann will man es aber niemals mehr missen! :-)

Nur als Tipp.

Gruß
Mike
Benutzeravatar
Gerhard
Beiträge: 37
Registriert: 29.09.2004 23:44
Wohnort: Zedtwitz

Beitrag von Gerhard »

Alles OK Mike,
vielen Dank für die Beiträge auch der anderen.
Für Spezialfälle habe ich bereits eine Liste im Programm
angelegt. Ja,das geht prima.

Tschüss aus Oberfranken
Gerhard
Antworten