Class Destroy() ? [erledigt]
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Class Destroy() ? [erledigt]
hi,
wenn ich XbParts habe und die auf der oDlg:DrawingArea plaziere dann werden die bei einem oDlg:Destroy() auch alle "sauber" entsorgt.
wenn ich aber noch mehr Objecte habe, die keine o:DrawingArea benötigen, wie bekomme ich die weg ?
klar könnte ich solche in ein Array aufnehmen ...
oder denke ich da jetzt falsch ... meisten hab ich ja eine Variabel := Class und wenn die lokal ist ...
es gibt ja eine o:initClass() ... aber keine o:exitClass() und eine Method o:Destroy() ist ja keine Pflicht.
Frage : muss ich bei einer eigenen Class, die nicht FROM XbPart ist, selbst "aufräumen" oder macht das der CG für mich ?
wenn ich XbParts habe und die auf der oDlg:DrawingArea plaziere dann werden die bei einem oDlg:Destroy() auch alle "sauber" entsorgt.
wenn ich aber noch mehr Objecte habe, die keine o:DrawingArea benötigen, wie bekomme ich die weg ?
klar könnte ich solche in ein Array aufnehmen ...
oder denke ich da jetzt falsch ... meisten hab ich ja eine Variabel := Class und wenn die lokal ist ...
es gibt ja eine o:initClass() ... aber keine o:exitClass() und eine Method o:Destroy() ist ja keine Pflicht.
Frage : muss ich bei einer eigenen Class, die nicht FROM XbPart ist, selbst "aufräumen" oder macht das der CG für mich ?
Zuletzt geändert von AUGE_OHR am Mi, 01. Okt 2014 9:41, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Hallo, Jimmy.
Objekte sind ganz "normale" Variablen. Sind sie LOCAL, werden sie gelöscht, wenn sich die entsprechende Funktion beendet. Sind sie PRIVATE, macht das der GC. Destroy() löscht ja bei entsprechenden Objekten - die i.d.R. XbParts sind oder zumindest von ihnen abgeleitet - nicht das Objekt selbst, sondern gibt nur die Systemressourcen frei. Bei Objekten, die nicht in diesem Kontext verwendet werden, ist das überflüssig. XbParts können aber nach meinem Dafürhalten tatsächlich nur gelöscht werden, wenn zuvor ein Destroy() erfolgt ist.
Objekte sind ganz "normale" Variablen. Sind sie LOCAL, werden sie gelöscht, wenn sich die entsprechende Funktion beendet. Sind sie PRIVATE, macht das der GC. Destroy() löscht ja bei entsprechenden Objekten - die i.d.R. XbParts sind oder zumindest von ihnen abgeleitet - nicht das Objekt selbst, sondern gibt nur die Systemressourcen frei. Bei Objekten, die nicht in diesem Kontext verwendet werden, ist das überflüssig. XbParts können aber nach meinem Dafürhalten tatsächlich nur gelöscht werden, wenn zuvor ein Destroy() erfolgt ist.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Class Destroy() ?
Hi Tom,
ich meine, dass Thema hatten wir schonmal. Bei LOCAL Variablen wäre ich vorsichtig mit der Behauptung, sie werden gelöscht, wenn die Funktion verlassen wird. Ich habe Funktionen, die oft hintereinander aufgerufen werden und LOCALe Var und Objekte enthalten. Es gab dabei starke Probleme, die erst dann behoben wurden, als ich jede LOCAL vor dem Beenden der Funktion mit NIL versehen hatte.
ich meine, dass Thema hatten wir schonmal. Bei LOCAL Variablen wäre ich vorsichtig mit der Behauptung, sie werden gelöscht, wenn die Funktion verlassen wird. Ich habe Funktionen, die oft hintereinander aufgerufen werden und LOCALe Var und Objekte enthalten. Es gab dabei starke Probleme, die erst dann behoben wurden, als ich jede LOCAL vor dem Beenden der Funktion mit NIL versehen hatte.
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!!
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Hallo, Manfred.
Das lag aber dann mit ziemlicher Sicherheit an Dir. Objekte können ja sehr komplex werden und beispielsweise Referenzen auf Variable enthalten, zum Beispiel Arrays, was dann Pointer wären. In dieser Situation kann die (automatische) Löschung tatsächlich scheitern.
Das lag aber dann mit ziemlicher Sicherheit an Dir. Objekte können ja sehr komplex werden und beispielsweise Referenzen auf Variable enthalten, zum Beispiel Arrays, was dann Pointer wären. In dieser Situation kann die (automatische) Löschung tatsächlich scheitern.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Class Destroy() ?
OK,
bevor wir jetzt ins Endlose kommen: Ich meinte, dass der GC nicht sofort den Speicher säubert und deshalb die Funktion beendet werden mußte, indem die LOCAls vorher genillt wurden. Danach hat der GC prima gearbeitet. Ich finde aber leider den Thread dazu nicht mehr. Oder doch? http://www.xbaseforum.de/viewtopic.php? ... it=garbage
bevor wir jetzt ins Endlose kommen: Ich meinte, dass der GC nicht sofort den Speicher säubert und deshalb die Funktion beendet werden mußte, indem die LOCAls vorher genillt wurden. Danach hat der GC prima gearbeitet. Ich finde aber leider den Thread dazu nicht mehr. Oder doch? http://www.xbaseforum.de/viewtopic.php? ... it=garbage
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Hallo Manfred,
die Antwort ist einfach ...
der GC killt eine LOCALE Variable, nachdem KEINE REFERENZ mehr auf diese besteht und er Zeit hat !
Wenn du also eine lokale Variable zurückgibst oder in einem CodeBlock verwendest, kann zwar die Funktion schon beendet sein,
deine Variable ist aber weiter in Verwendung. Da darf der GC diese auch nicht löschen.
Der Fall wo eine NIL Zuweisung sinnvoll ist, ist sehr begrenzt.
Angenommen du hast 300 MB Daten in einer String oder 10.000 Elemente in einem Array ... und das Programm ist anderweitig beschäftigt.
Der GC wird IRGENDWANN den Speicher bereinigen, wenn man aber solch großen Speicherbereiche nach der letzten Verwendung auf NIL setzt, weiß der GC sofort - viel unnötiger Speicher, den muss ich freigeben ... so zumindest habe ich es im Gedächtnis.
PS: es kostet nix die VAR auf NIL zu setzen, eventuell ist es nur überflüssig
die Antwort ist einfach ...
der GC killt eine LOCALE Variable, nachdem KEINE REFERENZ mehr auf diese besteht und er Zeit hat !
Wenn du also eine lokale Variable zurückgibst oder in einem CodeBlock verwendest, kann zwar die Funktion schon beendet sein,
deine Variable ist aber weiter in Verwendung. Da darf der GC diese auch nicht löschen.
Der Fall wo eine NIL Zuweisung sinnvoll ist, ist sehr begrenzt.
Angenommen du hast 300 MB Daten in einer String oder 10.000 Elemente in einem Array ... und das Programm ist anderweitig beschäftigt.
Der GC wird IRGENDWANN den Speicher bereinigen, wenn man aber solch großen Speicherbereiche nach der letzten Verwendung auf NIL setzt, weiß der GC sofort - viel unnötiger Speicher, den muss ich freigeben ... so zumindest habe ich es im Gedächtnis.
PS: es kostet nix die VAR auf NIL zu setzen, eventuell ist es nur überflüssig
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Woher kommt eigentlich diese Sicherheit, dass der GC irgendwas mit LOCALs am Hut hat?
@Manfred: Im von Dir verlinkten Thread gibt es ein Beispiel. In diesem Beispiel retourniert die Funktion einen Codeblock, der die lokalen Variablen enthält. Das nennt man "detached locals" (nur Martin verwendet diese Bezeichnung für eine andere Situation ). Diese Variablen müssen überleben.
@Manfred: Im von Dir verlinkten Thread gibt es ein Beispiel. In diesem Beispiel retourniert die Funktion einen Codeblock, der die lokalen Variablen enthält. Das nennt man "detached locals" (nur Martin verwendet diese Bezeichnung für eine andere Situation ). Diese Variablen müssen überleben.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Class Destroy() ?
vielleicht habe ich jetzt auch den falschen Thread in der Eile gewählt. Bei meinem Problem ging es um normale "Variablen"
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!!
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Class Destroy() ?
meinst du jetzt MICH ?Tom hat geschrieben:Woher kommt eigentlich diese Sicherheit, dass der GC irgendwas mit LOCALs am Hut hat?
Ab und zu verstehe ich deine Frage nicht
Wer sonst sollte ungenutzten Speicher aufräumen ?
Da keiner von uns den Quellcode hat, können wir nur vom Hörensagen leben und dort wurde ab und an erwähnt,
das der GC unbenutzte Speicherbereiche freigibt. Auch LOCALs werden nicht automatisch freigegeben, obwohl LONG eventuell schon.
Stringspeicher keinesfalls.
Gruß
Hubert
Hubert
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Hubert, was schreibst denn du
Wer wann welchen Speicher räumt ist doch völlig egal.
Sobald dein Objekt oder Funktion baden geht, tauchen auch die lokalen Variablen mit - unter der von Tom erwähnten Ausnahmen. Komplett wurst, ob NIL drin steht oder nicht.
Wer wann welchen Speicher räumt ist doch völlig egal.
Sobald dein Objekt oder Funktion baden geht, tauchen auch die lokalen Variablen mit - unter der von Tom erwähnten Ausnahmen. Komplett wurst, ob NIL drin steht oder nicht.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Sorry Herbert,
aber ... nein ich bleibe freundlich.
wenn du oben liest was ich geschrieben habe, siehst du dass ich von großen Speicherbereichen gesprochen habe,
die einfach schneller freigegeben werden wenn man die sofort auf NIL setzt, ich habe nicht geschrieben dass das (immer) nötig ist.
Aber ich habe durchaus 300 MB Strings im Speicher und unter Win32 kann es da eng werden, weil freier Speicher in Blöcken angesprochen wird.
Es mag sein, dass der GC zwischenzeitlich soviel besser wurde, dass die Info überholt ist, aber was einmal funktionierte merke ich mir halt.
Auf jeden Fall ist es NICHT FALSCH komplexe Variablen auf NIL zu setzen wenn man sie nicht mehr braucht.
Ich frage mich aber ernsthaft warum in letzter Zeit einige jedes meine Worte auf die Goldwaage legen ...
aber ... nein ich bleibe freundlich.
wenn du oben liest was ich geschrieben habe, siehst du dass ich von großen Speicherbereichen gesprochen habe,
die einfach schneller freigegeben werden wenn man die sofort auf NIL setzt, ich habe nicht geschrieben dass das (immer) nötig ist.
Aber ich habe durchaus 300 MB Strings im Speicher und unter Win32 kann es da eng werden, weil freier Speicher in Blöcken angesprochen wird.
Es mag sein, dass der GC zwischenzeitlich soviel besser wurde, dass die Info überholt ist, aber was einmal funktionierte merke ich mir halt.
Auf jeden Fall ist es NICHT FALSCH komplexe Variablen auf NIL zu setzen wenn man sie nicht mehr braucht.
Ich frage mich aber ernsthaft warum in letzter Zeit einige jedes meine Worte auf die Goldwaage legen ...
Gruß
Hubert
Hubert
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Hubert, ich lege nichts auf die Goldwaage.
Nimm diese Dinge bitte nicht persönlich.
Ich frage einfach.
und
verstehe weiterhin nicht, wieweit Speichergrenzen durch Setzen auf NIL weiter werden sollen. Was ist denn in diesen 300MB-Dingern?
Da hilft nur noch in 64-bit zu programmieren...echt.
Nimm diese Dinge bitte nicht persönlich.
Ich frage einfach.
und
verstehe weiterhin nicht, wieweit Speichergrenzen durch Setzen auf NIL weiter werden sollen. Was ist denn in diesen 300MB-Dingern?
Da hilft nur noch in 64-bit zu programmieren...echt.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Verboten ist dies nicht. Macht aber erst Sinn, wenn deren Inhalt echt gross ist.brandelh hat geschrieben: Es mag sein, dass der GC zwischenzeitlich soviel besser wurde, dass die Info überholt ist, aber was einmal funktionierte merke ich mir halt.
Auf jeden Fall ist es NICHT FALSCH komplexe Variablen auf NIL zu setzen wenn man sie nicht mehr braucht.
Aber es ging ja um die Frage, was mit den Dingen passiert, wenn das Objekt zerstört wurde. Dann sind die lokalen Variablen nämlich weg man und braucht keinesfalls mehr auf nill setzen .
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Class Destroy() ?
hi,
Danke für eure Antworten aber es geht nicht in die Richtung die ich meine.
Bei XbParts sind wir damit "verwöhnt" das der CG für uns einiges "aufräumt" aber eben nicht alles.hier wäre es ja nicht "nur" die Variabel "a" sondern es besteht ja auch eine "Verbindung" ( die Speicher angefordert hat )
auch bei den native Controls oder den native SQL Schnittstellen muss ich mich "manuell" um das "aufräumen" kümmern.
da es nun eine InitClass() gibt frage ich nach einer ExitClass() ...
Danke für eure Antworten aber es geht nicht in die Richtung die ich meine.
Bei XbParts sind wir damit "verwöhnt" das der CG für uns einiges "aufräumt" aber eben nicht alles.
Code: Alles auswählen
Local a := XbpActiveXControl()
auch bei den native Controls oder den native SQL Schnittstellen muss ich mich "manuell" um das "aufräumen" kümmern.
da es nun eine InitClass() gibt frage ich nach einer ExitClass() ...
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Class Destroy() ?
OK, vielleicht war ich zu "empfindlich" beim Lesen ...Herbert hat geschrieben:Hubert, was schreibst denn du
Wer wann welchen Speicher räumt ist doch völlig egal.
Sobald dein Objekt oder Funktion baden geht, tauchen auch die lokalen Variablen mit - unter der von Tom erwähnten Ausnahmen. Komplett wurst, ob NIL drin steht oder nicht.
Die Sache ist die, wie genau der GC arbeitet und ob die Überlegungen zwischenzeitlich unnötig sind, weiß ich auch nicht.
Richtig ist, dass ein String mit 300 MB z.B. der bearbeitet wird, also z.B. per Value an an eine Funktion übergeben wird,
mindestens einen ebensogroßen freien Speicherblock benötigt. Unter einem 32 Bit Windows teilt sich ja alles den physikalischen Speicher und wenn der nicht reicht wird auf Platte ausgelagert. Somit tritt hier das Problem früher auf als unter Win 64 bit.
Der GC macht einen super Job, denn z.B. C Entwickler müssen sich da selbst drum kümmern.
Dennoch kann man ihm die Arbeit erleichtern, wenn man nicht auf die automatische Ausführung vertraut, sondern die unnötige Stringvariable mit den vielen MB (bei einigen MB ist das alles unnötig) per NIL Zuweisung sofort freigibt.
lese ich so, dass ich keine Ahnung habe von was ich schreibe, aber ich verarbeitet tatsächlich Textdateien mit 500 MB und teilweise auch 300 MB mit memoread(), allerdings habe ich mittlerweile gemerkt dass die Verarbeitung mit meiner Klasse die immer 4 KB Blöcke einliest viel sicherer und auch schneller ist ...Herbert hat geschrieben:Hubert, was schreibst denn du
Wer wann welchen Speicher räumt ist doch völlig egal.
Zurück zur eigentlichen Frage ... wenn man keine Systemresourcen anfordert (Fonts, Drucker, Controls etc.) und auch keine Dateien öffnet), braucht man auch kein destroy(), grundsätzlich geht alles automatisch.
Gruß
Hubert
Hubert
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Unter 64bit hast du eine andere Verwaltung.brandelh hat geschrieben:Unter einem 32 Bit Windows teilt sich ja alles den physikalischen Speicher und wenn der nicht reicht wird auf Platte ausgelagert. Somit tritt hier das Problem früher auf als unter Win 64 bit.
Liest sich fast so, ja. Aber ich kenne ja deine Fähigkeiten und mit den unglaublichen Grössen erreichst du spezielle Grenzen. Trotzdem, eine Textdatei in dieser Grösse muss es zuerst mal geben. Ich denke, da erstellt jemand sehr unwirtschaftlich sehr grosse Dateien.brandelh hat geschrieben:lese ich so, dass ich keine Ahnung habe von was ich schreibe, aber ich verarbeitet tatsächlich Textdateien mit 500 MB und teilweise auch 300 MB mit memoread(), allerdings habe ich mittlerweile gemerkt dass die Verarbeitung mit meiner Klasse die immer 4 KB Blöcke einliest viel sicherer und auch schneller ist ...
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Class Destroy() ?
Hi Herbert, da muß ich Dich bitter enttäuschen. Ich muß Textdateien einlesen, die über 1GB Größe haben. Tendenz noch größer.
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!!
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!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Class Destroy() ?
Gegenfrage ... wann werden keine Systemresourcen anfordertbrandelh hat geschrieben:Zurück zur eigentlichen Frage ... wenn man keine Systemresourcen anfordert (Fonts, Drucker, Controls etc.) und auch keine Dateien öffnet), braucht man auch kein destroy(), grundsätzlich geht alles automatisch.
Es ging mir um das Problem wenn ein entsprechendes o:Destroy() von meiner Class nicht vom User benutzt wurde das es dann Probleme machen könnte.
ich habe das Problem Problem jetzt damit gelöst das ich FROM THREAD dazu genommen haben und somit über die Methoden
verfüge die ich zum sauber "aufräumen" benötige.:atEnd( [<xParamList,...>] ) --> NIL
:atStart( [<xParamList,...>] ) --> NIL
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Class Destroy() ?
Ich meinte natürlich die Win32 EXE in einem Win64 Betriebssystem.Herbert hat geschrieben:Unter 64bit hast du eine andere Verwaltung.brandelh hat geschrieben:Unter einem 32 Bit Windows teilt sich ja alles den physikalischen Speicher und wenn der nicht reicht wird auf Platte ausgelagert. Somit tritt hier das Problem früher auf als unter Win 64 bit.
Solche Dateien bekommt man meist von Großrechnern, bei uns im Datenaustausch von verschiedenen Systemen die mir Daten liefern und ja, ich komme an DBF 2 GB GrenzenHerbert hat geschrieben: und mit den unglaublichen Grössen erreichst du spezielle Grenzen.
Trotzdem, eine Textdatei in dieser Grösse muss es zuerst mal geben.
Ich denke, da erstellt jemand sehr unwirtschaftlich sehr grosse Dateien.
Bei der Lieferung sind einige dabei, die unnötigerweise fixe Satzlänge eingestellt haben,
aber andere haben tatsächlich 300 MB Dateien ohne feste Satzlänge.
Die größte Datei (CSV) erhielt ich von meiner Frau, die verzweifelt versucht hat in Excel 2010 einzulesen ...
über 2 Millionen Datensätze die sie kontrollieren sollte
Die "Dienstleister" die die erstellt haben, hatten kein Problem mit den Zeilen, aber Excel kann nur bis etwas über 1 Million.
Mit meiner TextReader Klasse habe ich die Datei eingelesen und auf die nötigen Felder reduziert in 4 CSV Dateien umgeladen.
Eigentlich wollte ich ja direkt eine Excel Datei mit 4 Arbeitsblättern erstellen, aber nach etwa 600.000 Zeilen ging dann auch die LibXL.DLL in die Knie.
Per Hand konnte ich mit Excel die 4 CSVs auf 4 Arbeitsblättern einlesen und zur Verfügung stellen.
Diese Dateien sind der Grund warum ich mich so intensiv mit Stringhandling und Optimierung beschäftigt habe.
Aber du hast schon Recht, kein "gewöhnliches" Problem
Gruß
Hubert
Hubert