1.ARRAY's dynamisch? 2.THREAD's bewirken Absturz
1.ARRAY's dynamisch? 2.THREAD's bewirken Absturz
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
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
- 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
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.
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.
Warum sollte es abstürzen? Es gibt doch virtuellen Speicher. Das Programm würde dadurch nur (vergleichsweise) elendig langsam werden.Sunny hat geschrieben: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.Belegen sie schon beim Dimensionieren den vollen Speicher-
platz?
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
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
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
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
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
