collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"

  • matzematzematze
  • matzematzematze's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
  • Posts: 60
  • Thank you received: 2

TPL_KUNENA_MESSAGE_CREATED collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"

03 Oct 2022 12: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

Please Log in or Create an account to join the conversation.

  • Günter07
  • Günter07's Avatar
  • New Member
  • New Member
  • Thank you received: 0

TPL_KUNENA_MESSAGE_REPLIED_NEW collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"

03 Oct 2022 20:58 - 03 Oct 2022 21:17
#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:
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 Oct 2022 21:17 by Günter07.

Please Log in or Create an account to join the conversation.

  • matzematzematze
  • matzematzematze's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
  • Posts: 60
  • Thank you received: 2

TPL_KUNENA_MESSAGE_REPLIED_NEW collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen"

10 Oct 2022 21:20
#3
Merci für die ausführliche Erläuterung. Grüße

Please Log in or Create an account to join the conversation.

Moderators: ThornIG-Modellbau
Time to create page: 0.335 seconds
Powered by Kunena Forum