Nun nachdem ich den texturenmanager auch habe wieder löschen lassen sind nun einige leakmsgs weniger da:
Code:
13 - 20 bytes: String x 2
29 - 36 bytes: Unknown x 1
45 - 52 bytes: TStringList x 2
Strings: kA habe hauptsächlich const strings. Ansonsten wüsste ich aber auch nich, dass man strings wieder freigeben müsse?
Unknown:.. tja ich kenns auch nich
Stringlist: benutz ich gar nich, in keiner Datei nur hashedstringlists
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Shaddow,
So hab jetzt mal ohne DVD-Renderimg, und komme auf 1006 fps.
(sorry, aber bei der teuren Umbau-investition , brauch ich mal was erfreuliches )
Nun zu FastMM..,
Das was du noch übrig hast, kann ich nicht ohne Source zuordnen.
Ich vermute stark das es sich nur noch um ein einzigstes Object handelt.
Daher auch die Strings, welche nicht freigegeben werden.( wie auch, macht doch delphi ).
Ein construct wie folgender ...
Code:
type
TMyObject = object
str1 : string;
str2 : string;
StrL1 : TStrings;
StrL2 : TStrings;
end;
...würde nach vergessener Freigabe in etwa dieselbe Fehlermeldung präsentieren.
Dein "Unknown" repräsentiert das Object selbst, und daraus resultieren die mitgeführten strings und StringList(en) als "nicht freigegeben".
So etwas musst du suchen, und dann bist du es Los.
schaue in deiner Protokolldatei, wo TStringlist(en) erzeugt werden. Meist handelt es sich dann genau um dieses object, welches die TStrings beinhaltet.
Deklariert als TStrings oder TStringlist, aber erzeugt wird immer mit xxx := TStringList.Create
Gruß Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
ja danke nur das prob ist, ich habe GAR keine stringlisten mehr drin sondern nur noch hashedstringlisten udn die habe ich schon alle durchgechecked. ich sehe gleich nochmal durch und poste dann die codefragmente, von denen ich denke dass sie vllt was verursachen. ma schaun
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
na HashedStringListen sind doch nix anderes.
hier mal den Auszug aus der Hilfe
THashedStringList verwaltet eine Stringliste mit einer internen Hash-Tabelle.
Zitat:
Unit
IniFiles
Beschreibung
Ein THashedStringList-Objekt ist eine Stringliste, die intern eine Hash-Tabelle verwendet, um die Suche nach Strings zu beschleunigen. Es wird intern von TMemIniFile verwendet, um die Strings in einer INI-Datei zu verwalten. Das Objekt kann jedoch wie jede andere Stringliste genutzt werden. Insbesondere bei Listen mit einer großen Anzahl von Strings kann die Leistung durch die Verwendung der Klasse THashedStringList anstelle von TStringList optimiert werden.
Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Shaddow,
So aus der Ferne wird dann nicht mehr viel Diagnosemöglichkeit machbar sein.
wie geagt, alle "Create"s suchen, mit Haltepunkt vllt. Name aufschreiben,
den passenden Free suchen ....
Am Ende MUSS was übrigbleiben
ist ne echte schei..-arbeit, aber da musst du durch. Ich hab mal 14 Tage gebraucht, und seit dem bastel ich den FastMM gleich zu Anfang rein, und baue dann das Prog weiter. Zum schluss die Compilereinstellung (T32debug) rausgenommen und FastMM ausgeremmt, und dann hast auch wieder ne kleine EXE.
Gruß Uwe
PS : versuche einzelne Objecte aus deinem Programm vorrübergehen auszukommentieren.
dann neu Compilieren. Ändert sich nix, dann wars das falsche, und dann nimmst das nächste usw.
gutes Gelingen
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Folgendermaßen kann man mit FastMM4 die Lecks recht gut finden:
1. FullDebugMode in der FastMM Konfig (FastMMOptions.inc) aktivieren
2. In den Projektoptionen der zu debuggenden Anwendung in den Projektoptionen unter Linker Map-Datei auf detailliert stellen (vllt gehts auch mit ner niedrigeren Einstellung, ich habs jedoch nur mit detailliert getestet)
3. In der ProjektName_MemoryManager_EventLog.txt stehen nur die Speicherlecks mit Inhalt und Daten darüber wo du der Speicher reserviert wurde.
Zitat:
... A memory block has been leaked. The size is: 4
Stack trace of when this block was allocated (return addresses): 402942 [System][@GetMem] 402ED9 [System][TObject.NewInstance] 403212 [System][@ClassCreate] 402F18 [System][TObject.Create] 46D32B [Main.pas][Main][Init][50] 46D337 [Main.pas][Main][Init][52] 46D3B5 [Main.pas][Main][TForm1.FormCreate][74] 437AE7 [Forms][TCustomForm.DoCreate] 43782A [Forms][TCustomForm.AfterConstruction]
The block is currently used for an object of class: TObject ...
Also ich habs mir jetz nochma angesehen und es hat sich herausgestellt, dass in meinem Texturemanager 5 Stringleaks und 1 Stringlistleak sind.
Hier mal der Code, ich find den fehler partout nicht:
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
hi Shaddow,
zwischen 24 und 25 sollte benfalls ein "inherited create" rein.
Soweit alles io, aber wie ist dein TBugTracker aufgebaut ?
der ist ja auch enthalten ?
Ist der deine Fehlerquelle?
Gruß Uwe
Beitrag wurde kommplett editiert, da zuvor falsche Aussage
((hoffe jetzt ist richtig)
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
es reicht schon aus, die uses-Anweisung wieder in Betrieb zu nehmen, also die EasySDLTextures einzubinden.
Du brauchst nicht einmal das x im Programm "an"zuschalten, das kann alles auskommentiert bleiben.
Und schon zeigt dir FastMM4 eine verlorene TStringList beim beenden des Programms an.
Da stimmt wohl dann mit der EasySDLTextures was nicht.
Gruß Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.