Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA:

collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen" 03 Okt 2022 14:23 #1

  • matzematzematze
  • matzematzematzes Avatar Autor
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 60
  • Dank erhalten: 2
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen" 03 Okt 2022 22:58 #2

  • Günter07
  • Günter07s Avatar
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 215
  • Dank erhalten: 197
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:
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Günter07.

collectgarbage() - notwendig / sinnvoll bei kleinen "Progrämmchen" 10 Okt 2022 23:20 #3

  • matzematzematze
  • matzematzematzes Avatar Autor
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 60
  • Dank erhalten: 2
Merci für die ausführliche Erläuterung. Grüße

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Seite:
  • 1
Moderatoren: ThornIG-Modellbau
Ladezeit der Seite: 0.186 Sekunden
Powered by Kunena Forum