Local Variablen und deren Lebensdauer

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Local Variablen und deren Lebensdauer

Beitrag von Manfred »

ich hatte diesbezüglich schonmal einen thread eröffent, kann ihn aber mal wieder nicht finden. Ist auch schon recht lange her. Damals ging es darum, eine Funktion zu haben, in der LOCAL Variablen deklariert werden, die sehr häufig nacheinander aufgerufen wird. Dabei kam heraus, das der Garbage Collector nicht schnell genug hinterher kam um die Variablen aus dem Speicher zu entfernen und der Speicher wurde immer mehr zugeschaufelt damit. Also half hier nur am Ende der Funktion ein NIL der Variablen. Jetzt stellt sich mir aber folgende weitere Frage. Was ist hiermit?

Code: Alles auswählen

function test()
             local cwert
             cwert := "wwi"
             return cWert
            
Hier kann die Var cWert ja nicht genillt werden. Wäre es da nicht besser sowas zu machen?

Code: Alles auswählen

Function test(cWert)
			cWert := "wwi"
			return cWert
oder von mir aus auch nur Return(.T.)
Die Var cWert würde dann per Referenz an die Funktion TEst übergeben, aber wäre nicht nochmal erneut in der Funktion deklariert. Kann erstes Beispiel evtl. auch den Speicher zumüllen? Irgendwie habe ich so den Verdacht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Tom »

Das läuft auf das gleiche hinaus, weil ein Parameter eine implizite Variablendeklaration nach sich zieht - es sei denn, er wird per Referenz übergeben. Du benötigst doch immer eine lokale Variable, um Parameter zu verwalten.

Nach meinem Verständnis hat das alles aber ohnehin nix mit dem GC zu tun, weil der Vorteil von lokalen Variablen ja u.a. gerade darin besteht, nur für die Dauer eines Funktionsaufrufs zu leben. Mit dem Ende der Funktion ist auch die Speicherstelle wieder verfügbar. Es hängt ja keine Symbolverwaltung dran, wie bei PRIVATEs oder PUBLICs.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

es ist aber so, wie oben erwähnt. Der Speicher füllte sich immer mehr. Erst als ich vor dem Verlassen der Funktion alle Var genillt hatte, ging dieses Problem sofort drastisch zurück. Wobei natürlich der Aufruf der Funktion in relativ großen Stückzahlen nacheinander erfolgte. und damit war der GC total überfordert. (anscheinend)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von georg »

Hmm,


ich denke nicht, dass LOCALs ohne Garbage Collector auskommen.

Sie sind vom Zugriff schneller, da die Laufzeitumgebung sie nicht in der Variablen-Tabellen lokalisieren muss, aber die Werte, die in LOCALs gespeichert werden, die bleiben da drin, bis sie der Garbage Collector killt.

Aber das ist mehr so ein Gefühl, das von Manfreds Beobachtung unterstützt wird.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Tom »

Ich halte das für Unsinn. Außer bei „detached locals“ gibt es nie den Fall, dass Locals ihre heimische Funktion überleben. Sie können also immer mit dem RETURN freigegeben werden. Ein Garbage Collector hat eine andere Aufgabe.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

was hälst Du für Unsinn? Die Local Variablen in einer Funktion zu nillen, die sehr oft hintereinander aufgerufen wird?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von georg »

Hallo, Tom -


ich denke, es ist schwierig, nachzuvollziehen, wie Alaska eine LOCAL Variable nach dem Verlassen einer Funktion behandelt.

Ich habe auch nicht behauptet, dass wir innerhalb des Programms auf die Werte zugreifen können, die eine LOCAL Variable nach dem Verlassen der Funktion hat. Sie können mit dem RETURN freigegeben werden, aber das muss nicht zwingend sein.

Manfreds Beobachtung, dass der Speicherverbrauch ansteigt, wäre ein Indiz, dass sie eben nicht sofort beim Verlassen der Funktion platt gemacht werden.

Wir wissen, dass LOCALs als Speicheradresse angelegt und genutzt werden - aber es ist ohne weiteres möglich, dass beim zweiten Aufruf einer Funktion die LOCAL Variable an einer ganz andren Stelle im Speicher liegt, also nicht der exakt gleiche Speicherplatz verwendet wird. Und damit wäre es schon eine Aufgabe für den Garbage Collector.

Ich halte es sogar für sehr wahrscheinlich, dass bei jedem Aufruf einer Funktion andere Speicheradressen für die Variablen verwendet werden: würde immer exakt die gleiche Speicheradresse für LOCALs verwendet, könnten verschiedene Threads, welche die gleiche Funktion aufrufen, die Werte der LOCALs dieser Funktion gegenseitig verändern. Aber auch das ist spekulatives Denken.

Leider wissen wir an vielen Stellen nicht, wie Xbase++ intern tickt ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: So, 21. Okt 2018 10:43

Code: Alles auswählen

function test()
             local cwert
             cwert := "wwi"
             return cWert
            

Code: Alles auswählen

Function test(cWert)
			cWert := "wwi"
			return cWert
beim 1st Fall von Manfred könnte ich es verstehen. da verwende ich bei DllCall dann eine STATIC (um nicht immer wieder ein Handle anzufordern)
beim 2nd Fall mit der detached LOCAL sehe ich das Problem nicht da ich da auch ständig mache und es (mit der v1.9.335) nicht beobachten kann.

es stellt sich die Frage in welchen Zusammenhang Manfred die Function benutzt und ob das nur der letzte Tropfen ist der das Fass zum überlaufen bringt :?:
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

Das würde mich jetzt mal genauer interessieren. Denn für mich ist es bislang immer egal gewesen, ob ich ein FUNCTION meineFunktion(cParameter) oder ein LOCAL cParameter mache - in beiden Fällen ist cParameter LOCAL. Zumindest in dieser Funktion. Ob in dem Fall der Parameterübergabe die Variable in der aufrufenden Funktion LOCAL, PUBLIC, oder sonstwas ist ist natürlich vollkommen gleich. Das heißt dann im Umkehrschluß natürlich, das bei einer Parameterübergabe der Speicherverlust eventuell nicht in der aufgerufenen, sondern in der aufrufenden Funktion geschehen könnte.

Allerdings war ich auch grundsätzlich davon ausgegangen, das ein LOCAL beim Verlassen einer Funktion restlos aus dem Speicher verschwindet. Das Einzige, das ich mir vor langer Zeit mal angewöhnt hatte, ist, das ich nicht mehr benötigte XbParts vor dem Verlassen einer Funktion nicht nur :destroy()e, sondern auch NILe. Wobei ich da jedes mal wieder drüber stolpere und ich mich frage, ob das wirklich notwendig ist. Aber der Mensch ist halt oftmals ein Gewohnheitstier... Und da mache ich dann doch lieber zu viel als zu wenig...

Ob eine Variable bei mehrfachem Aufruf der Funktion an unterschiedlichen Speicherbereichen abgelegt wird sollte in meinen Augen vollkommen egal sein. Da die als LOCAL ja rausfliegen sollte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von georg »

Hallo, Jan -


je länger ich über das Thema nachdenke, um so mehr komme ich zu der Überzeugung, dass LOCALs beim Aufruf der Funktion initialisiert werden, und nach dem Verlassen der Funktion der Garbage Collector sich drum kümmert, was mit den Inhalten der LOCALs passiert.

Und ich bin auch überzeugt (was leider auch bedeutet, dass ich es nicht beweisen kann :blob8:), dass bei jedem Aufruf einer bestimmten Funktion deren LOCALs auf einen anderen Speicherplatz gesetzt werden. Ich versuche mal, das zu erklären: gesetzt sei eine Funktion, die eine Datei, deren Namen als Parameter übergeben wird, öffnet, den Dateiinhalt liest, die Datei schliesst und den Dateiinhalt als String zurückgibt.

Nehmen wir die LOCAL nHandle, in der der Datei-Handle abgelegt wird. Diese Variable zeigt auf den Speicherplatz 123456. Jetzt arbeitet unser Programm mit Threads, und die Funktion wird gleichzeitig von zwei verschiedenen Threads aufgerufen und soll zwei verschiedene Dateien auslesen. Dann würden in beiden Threads die Variable nHandle (obwohl sie verschiedene Werte enthalten würde) am Speicherplatz 123456 nutzen und die Funktions-Instanz, die als zweite gestartet wird, würde den Wert der ersten Instanz überschreiben. Das kann so nicht gewollt sein, und meine Erfahrung mit Threads unter Xbase++ zeigt, dass das auch nicht passiert.

Von daher bin ich der Überzeugung, dass bei jedem Aufruf einer Funktion die LOCALs auf neue Speicherplätze gemappt werden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

Manfred hat geschrieben: So, 21. Okt 2018 10:43

Code: Alles auswählen

Function test(cWert)
			cWert := "wwi"
			return cWert
oder von mir aus auch nur Return(.T.)
Die Var cWert würde dann per Referenz an die Funktion TEst übergeben, aber wäre nicht nochmal erneut in der Funktion deklariert. Kann erstes Beispiel evtl. auch den Speicher zumüllen? Irgendwie habe ich so den Verdacht.
Manfred,

wenn Du hier cWert als Referenz übergibst, dann ist cWert in test() erstmal ja trotzdem LOCAL. Und wie Du schon anmerkst, kannst Du Dir das RETURN cWert sparen. Oder solltest Du sogar grundsätzlich, wer weiß, was das noch für Nebenwirkungen haben könnte.

Wobei ich ganz ehrlich sagen muß das ich keine Ahnung habe, wie sich sowas auf detached Locals auswirkt. Da wissen sicher unsere Spezies auf dem Gebiet (Tom und Martin) wesentlich mehr zu zu sagen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

Moin Georg,

da stimme ich Dir absolut zu. Aber wie gesagt: Wenn der Garbage Collector sich um das Verwerten von LOCALs nach dem Verlassen einer Funktion kümmert, dann darf der Speicherbereich nicht relevant sein. Oder ob der für einen erneuten Gebrauch der gleichen Variablen wiederbenutzt wird.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von ramses »

Ich arbeite sehr viel mit locals in Funktionen ohne diese jeweil zu "nil-en" auch mit Funktionen die viele tausend Mal ausgerufen werden ändert sich der Speicherverbrauch der APP nach einem Neustart über Wochen kaum.
Könnte es sein dass du einer local einen Handle ausserhalb Xbase zuweisst der dann ohne Schliessen irgendwie hängen bleibt?

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Tom »

Ich halte das für Unsinn. Das ist nicht die Aufgabe des GC.
Fragen wir doch mal Alaska.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von ramses »

Tom

was hältst du für Unsinn?

Ich kann eine Funktions - DLL (nicht XBase) laden und den Funktions Handle zu dieser DLL einer Local Variable zuweisen.
Wenn ich meine Xbase Funktion ohne das freigeben/schliessen geladenen DLL verlasse bleibt der Speicher reserviert und der Speicherbedarf der App steigt und steigt. .... Dann ist nicht die Local daran schuld sondern "das nicht Schliessen" des darin gespeicherten Handles.

Manfred zeigt ja am Anfang nicht seine wirkliche Funktion mit welcher er Probleme hat sondern vermutet den GC von XBase als Problem. Deshalb der Hinweis ob nicht etwas "externes" die Ursache sein könnte ....


Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

mein Einganspostung war nur ein Beispiel auf eine generelle Frage. Von Problemen ist da (noch) nicht die Rede.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Tom »

Dass das GC irgendwie mit Locals zu tun hat, Carlo.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von ramses »

@Tom, dann meinen wir ja das selbe.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

nach meinen Versuchen jetzt gibt es auf jeden Fall schonmal eine Erkenntnis: wenn man lokale Objekte in einer Funktion erzeugt und diese Funktion immer wieder aufgerufen wird (auch im Abstand von 5 Minuten) ist der Speicherverbrauch um einiges höher als wenn man diese einmal am Anfang dekalariert und dann z.B. als Parameter übergibt an die Funktion. Was aber nicht immer machbar ist. In dem Fall ging /geht es und ich habe es einmal versucht. Das Ergebnis ist, das ca 50% weniger Speicher verbraucht wird, als wenn die Objekte jedesmal erzeugt werden in der/den Funktionen und dann am Ende vor dem Verlassen sogar genillt werden. Also doch nicht so ganz quick and dirty zu programmieren unter xbase++
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

Manfred,

mich würde da mal interessieren, was Alaska dazu sagt. Immerhin gehen wir alle ja ansich davon aus, das LOCALs keinen negativen Einfluß auf die Speicherbelegung haben sollten (in dem Sinne, wie Du das hier beschrieben hattest).

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

mich auch und deshalb habe ich auch eine Anfrage an den Support gestellt, wie es sich generell damit verhält.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von Manfred »

und hier die Antwort:
Hallo Manfred,

ja, das Zuweisen von NIL an die LOCAL-Variable hebt die Referenz auf das Objekt auf und erlaubt dem Garbage Collector somit, es freizugeben. Vorausgesetzt natürlich, dass im FUNCTION-Code nicht noch andere Referenzen erzeugt werden.

Der von Dir geschilderte Fall sollte eigentlich nur auftreten, wenn test() sehr häufig und sehr schnell aufgerufen wird, und selbst keinen Code ausführt, der den ausführenden Thread auch mal schlafen legt. In solchen Fällen kann es vorkommen, dass der Garbage Collector nicht schnell genug zum Zuge kommt und dadurch (vorübergehend) hohe Speicherlasten entstehen. Dies geschieht zum Beispiel, wenn ein solcher Code innerhalb einer Schleife ausgeführt wird (Inner Loop).

In so einem Fall kann die Verwaltung der Resource entweder ausgelagert (sprich: innerhalb der Schleife als Parameter übergeben) werden, oder das Einbauen von Sleep(0) in test() kann dem System helfen, die Ausführung der verschiedenen Systemthreads besser zu balancieren. Das Freigeben kann leider nicht explizit erzwungen werden.

Ich hoffe, dies beantwortet Deine Fragen.

Schöne Grüße,
in der Frage ging es auch darum, wenn ich eine local variable als Objekt anlege
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Jan »

Hallo Manfred,

wer hat Dir denn da geantwortet?

Aber zur Sache: Ich interpretiere das also so, das (zumindest bei Objekten) eine Zuweisung von NIL immer eine gute Idee ist. Und der GC auch auf LOCALS greift (zumindest bei Objekten). Zusätzlich ist es nie ein Fehler, an sinnvollen Stellen mal ein Sleep(0) einzubauen. Kostet keine Zeit, schupst aber auch mal den GC an bzw. gibt ihm Luft zum Atmen.

Interessante Aussage. Insbesondere das mit dem NILen und dem GC auf LOCALs.

Bemerkenswert finde ich auch, das der Vorschlag von Dir, den Parameter als LOCAL durch eine Parameterübergabe zu erstellen, in dem Fall hilft. LOCAL ist ja letztendlich LOCAl, egal wie erstellt. Hier macht vermutlich nur die Anzahl der Erstellungen den relevanten Unterschied. Hattest Du das denn mal getestet? Oder einfach nur in Deinem Eingangsposting als Möglichkeit erwähnt?

Aber NILen läßt sich das ja in beiden Fällen nicht, das wär irgendwie kontraproduktiv. Was aber lt. der Alaska-Antwort hier wohl auch nicht notwendig ist, es geht ja vermutlich eben gerade nicht um ein Objekt.

Das mit dem Sleep(0) ist ja ansich eine bekannte Sache. Ich muß mich aber mal mehr darauf einstielen, das etwas häufiger zu verwenden. Da das zur eigentlichen Codeausführung nicht notwendig ist fällt das dann doch meist irgendwie hinten über.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Local Variablen und deren Lebensdauer

Beitrag von Tom »

Das überrascht mich. Danke fürs Nachfragen, Manfred.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Local Variablen und deren Lebensdauer

Beitrag von georg »

... und mich überrascht es nicht, bestätigt einiges, was in der Doku zu finden ist.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten