Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Variablen

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1963
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Variablen

Beitrag von Koverhage » Do, 05. Nov 2015 13:46

Ich habe das problem, dass unsere Anwendung nach dem Start immer langsamer wird und wollte der Sache mit MEMWATCH auf dem Grund gehen.
Im Fenster PUBLICS
stehen, z.B.

GetList
PromptList
oDesktop
dCCOLOR

GetList benutze ich, ist aber überall als Local deklariert, die anderen benutze ich nicht
Habe auch im Quellcde keine PUBLIC Deklarationen gefunden außer für dCCOLOR in _dccolor.prg
welches ich auch nicht benutze, aber vermutlich dann von Express++ irgendwo.

Woher können die Publics kommen ?

Eventuell liegt es auch am ToolTip Sytem, aber das möchte ich wenn möglich nicht deaktivieren.
Gruß
Klaus

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6797
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Variablen

Beitrag von Tom » Do, 05. Nov 2015 14:11

Hallo, Klaus.

Wenn Du die Quellcodes von eXpress++ durchsuchst, wirst Du feststellen, dass diese Variablen zwar erzeugt, aber nahezu ausschließlich als LOCALs verwaltet werden. "PromptList" beispielsweise wird von "DC_MenuTo()" verwendet, aber als Parameter. Auch das Tooltip-System macht das nicht. "GetList" oder "oDialog" sind immer Parameter.

"dCColor" wird allerdings von "DC_ClrArr()" als PUBLIC erzeugt. Es findet sich im gesamten Quellcode nur an dieser einen Stelle überhaupt das Kommando "PUBLIC". Ich glaube nicht, dass man diese Funktion überhaupt noch verwenden sollte. Sie steht in irgendeiner impliziten Prozedur.

So oder so, vier Publics verlangsamen nicht Deine Software. Allerdings werden Objekte, die von Objekten referenziert werden, die nicht zerstört werden können, weiter im Speicher gehalten. Der GC zerstört sie nicht. So ähnlich verhält es sich in einigen Situationen mit Arrays. Du solltest Deine Dialoge nacheinander aufrufen und schauen, welche den Speicher nicht freigeben.
Herzlich,
Tom

Antworten