collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"
- matzematzematze
- Offline Autor
- Senior Mitglied
- Beiträge: 60
- Dank erhalten: 2
collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen" wurde erstellt von matzematzematze
Posted 03 Okt. 2022 14:23 #1
Hallo zusammen,
ich arbeite mich zur Zeit in LUA ein.
Vereinzelt sehe in den Codes den Aufruf collectgarbage() am Ende von Funktionen in denen Variabler belegt wurden.
Ist dies wirklich bei einfachen Aufgaben/Programmen notwendig (oder zumindest besser)?
Viele Grüße
Matthias
ich arbeite mich zur Zeit in LUA ein.
Vereinzelt sehe in den Codes den Aufruf collectgarbage() am Ende von Funktionen in denen Variabler belegt wurden.
Ist dies wirklich bei einfachen Aufgaben/Programmen notwendig (oder zumindest besser)?
Viele Grüße
Matthias
von matzematzematze
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Günter07
- Offline
- Elite Mitglied
- Beiträge: 232
- Dank erhalten: 225
Günter07 antwortete auf collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"
Posted 03 Okt. 2022 22:58 #2
Hallo Matthias,
ich bin auch gerade dabei mir etwas LUA anzulernen und stöbere natürlich überall herum um ein paar Antworten zu bekommen...
Die Frage CG ist nicht so leicht zu beantworten und ich glaube Du wirst nicht viele Antworten bekommen. Ich versuche es einmal mit meinem Wissenstand und bitte die nachfolgenden User die es besser wissen mich nicht zu kreuzigen
Eigentlich benötigt man CG nicht weil LUA damit alleine sehr gut umgehen kann. CG hilft eigentlich nur wenn man viele Variablen benutzt und diese dann nicht mehr benötigt. Vor dem CG muss man aber den Variablen den Wert NIL zuweisen weil eine Variable wo auch nur ein einziger Zeiger hinweist nicht bei CG gelöscht wird!!!
Ich habe selbst einmal ein großes Array produziert und es anschließend mit der Zuordnung von NIL gelöscht. Zumindest habe ich das geglaubt... nachdem ich diese Variable wieder verwenden wollte waren alle Werte wieder da!!! Diese werden nämlich erst nach CG tatsächlich gelöscht, aber nur wenn kein weiterer Zeiger existiert!!!
Um vielleicht die Auswirkung deiner Programmierung selbst zu testen, verwende einfach einmal diesen Code:
Der Befehl "count" gibt die gerade benötigte Speichergröße in KB deiner Anwendung an.
Probiere es einmal aus und Du wirst sehen nach Zuordnung von NIL an deine Variable verwendet dein Programm sogar mehr Speicher als vorher!!! NIL gibt den Speicher nicht frei, aber ordnet diesen Wert deiner Variablen zu.
Den TimeCounter habe ich laufen gelassen weil auch CG Zeit benötigt die Du vielleicht nicht opfern willst!!!
Bei meinem Test mit einem Array (ca. 100 Werte) waren es immerhin 6 Millisekunden.
Also: Nach NIL wird kein Speicher freigegeben. Auch CG benötigt Zeit. LUA kann eigentlich selbst sehr gut damit umgehen.
Jetzt hast Du einmal einen kleinen Vorgeschmack bekommen
Viel Spaß beim Programmieren!!!
LG Günter
ich bin auch gerade dabei mir etwas LUA anzulernen und stöbere natürlich überall herum um ein paar Antworten zu bekommen...
Die Frage CG ist nicht so leicht zu beantworten und ich glaube Du wirst nicht viele Antworten bekommen. Ich versuche es einmal mit meinem Wissenstand und bitte die nachfolgenden User die es besser wissen mich nicht zu kreuzigen
Eigentlich benötigt man CG nicht weil LUA damit alleine sehr gut umgehen kann. CG hilft eigentlich nur wenn man viele Variablen benutzt und diese dann nicht mehr benötigt. Vor dem CG muss man aber den Variablen den Wert NIL zuweisen weil eine Variable wo auch nur ein einziger Zeiger hinweist nicht bei CG gelöscht wird!!!
Ich habe selbst einmal ein großes Array produziert und es anschließend mit der Zuordnung von NIL gelöscht. Zumindest habe ich das geglaubt... nachdem ich diese Variable wieder verwenden wollte waren alle Werte wieder da!!! Diese werden nämlich erst nach CG tatsächlich gelöscht, aber nur wenn kein weiterer Zeiger existiert!!!
Um vielleicht die Auswirkung deiner Programmierung selbst zu testen, verwende einfach einmal diesen Code:
Code:
local function init()
mytable = DEINE VARIABLEN UND/ODER ARRAY
print(collectgarbage("count"))
mytable = nil
print(collectgarbage("count"))
a=system.getTimeCounter()
print(collectgarbage("collect"))
print(system.getTimeCounter()-a)
print(collectgarbage("count"))
end
Der Befehl "count" gibt die gerade benötigte Speichergröße in KB deiner Anwendung an.
Probiere es einmal aus und Du wirst sehen nach Zuordnung von NIL an deine Variable verwendet dein Programm sogar mehr Speicher als vorher!!! NIL gibt den Speicher nicht frei, aber ordnet diesen Wert deiner Variablen zu.
Den TimeCounter habe ich laufen gelassen weil auch CG Zeit benötigt die Du vielleicht nicht opfern willst!!!
Bei meinem Test mit einem Array (ca. 100 Werte) waren es immerhin 6 Millisekunden.
Also: Nach NIL wird kein Speicher freigegeben. Auch CG benötigt Zeit. LUA kann eigentlich selbst sehr gut damit umgehen.
Jetzt hast Du einmal einen kleinen Vorgeschmack bekommen
Viel Spaß beim Programmieren!!!
LG Günter
Last Edit:03 Okt. 2022 23:17
von Günter07
Letzte Änderung: 03 Okt. 2022 23:17 von Günter07.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- matzematzematze
- Offline Autor
- Senior Mitglied
- Beiträge: 60
- Dank erhalten: 2
matzematzematze antwortete auf collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"
Posted 10 Okt. 2022 23:20 #3
Merci für die ausführliche Erläuterung. Grüße
von matzematzematze
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Moderatoren: Thorn, IG-Modellbau
Ladezeit der Seite: 1.007 Sekunden