![]() |
MemProof Auswerten
Hallo
Ich habe MemProof als Tool bei Delphi eingebunden und mein Projekt mal überprüft. Folgendes ist dabei rausgekommen :(
Code:
//wenn die Anwendung gestartet ist
Pointers Live Pointer 4118 4133 439466 450882 Memory Virtual Memory 22 23 446464 462848 Memory Global Heap 15 23 426676 1802240 Memory Local Heap 2 2 5692 5692 COM CoInitialize 1 1 0 0 OLE SysString 15 22 119 181 Exceptions Exception 83 83 249 249 GDI Pen 5 6 0 0 GDI Bitmap 138 141 0 0 GDI Brush 8 11 0 0 GDI Font 10 10 0 0 GDI Palette 8 16 0 0 GDI Region 0 5 0 0 GDI DC 0 15 0 0 User Window 63 64 0 0 User Menu 6 6 0 0 User Icon 6 7 0 0 User Cursor 7 7 0 0 User Timer 3 5 0 0 User Window DC 0 3 0 0 Kernel Process 1 1 0 0 Kernel Thread 1 1 0 0 Kernel File Mapping 1 1 0 0 Kernel File Mapping View 1 1 0 0 Kernel Mutex 1 1 0 0 Kernel Event 3 3 0 0 Kernel Critical Section 273 274 0 0 Kernel Critical Section Enter 0 6 0 0 Kernel Find First 0 1 0 0 Registry Registry 0 1 0 0
Code:
Wenn die Anwendung beendet wurde sollte doch eigentlich bei "Resource Count Current" alles auf Null stehen oder :gruebel:?
//wenn die Anwendung beendet wurde
Pointers Live Pointer 1 4133 48 450882 Memory Virtual Memory 1 23 4096 462848 Memory Global Heap 0 23 0 1802240 Memory Local Heap 0 2 0 5692 COM CoInitialize 0 1 0 0 OLE SysString 0 22 0 181 Exceptions Exception 113 113 339 339 GDI Pen 0 6 0 0 GDI Bitmap 0 143 0 0 GDI Brush 0 11 0 0 GDI Font 0 10 0 0 GDI Palette 0 16 0 0 GDI Region 0 5 0 0 GDI DC 0 15 0 0 User Window 0 64 0 0 User Menu 0 6 0 0 User Icon 0 7 0 0 User Cursor 0 7 0 0 User Timer 0 5 0 0 User Window DC 0 3 0 0 Kernel Process 1 1 0 0 Kernel Thread 0 1 0 0 Kernel File Mapping 0 1 0 0 Kernel File Mapping View 0 1 0 0 Kernel Mutex 0 1 0 0 Kernel Event 0 3 0 0 Kernel Critical Section 0 274 0 0 Kernel Critical Section Enter 0 6 0 0 Kernel Find First 0 1 0 0 Registry Registry 0 1 0 0 In den "Resourcen Details" verweist er mich auf folgenden Code
Delphi-Quellcode:
Wo steckt nun der Fehler ? und was genau bedeutet eigentlich "Exceptions 113" eine kleine Auswertung und Erklärung zu diesem Beispiel wäre sehr hilfreich für mich :mrgreen:
slDelimiter := TStringList.Create;
if not FileExists(ExtractFilePath(Application.ExeName)+'\setting.ini') then begin Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'setting.ini'); Ini.WriteString('Equalizer','Default', '|15|15|15|15|15|15|15|15|15|15|'); Ini.WriteString('Equalizer','Classical', '|15|15|15|15|15|15|5|5|5|2|'); Ini.WriteString('Equalizer','Club', '|15|15|19|23|23|23|19|15|15|15|'); Ini.WriteString('Equalizer','Dance', '|23|20|16|15|15|10|10|10|15|15|'); Ini.WriteString('Equalizer','Full Bass', '|25|25|25|20|17|12|7|3|3|3|'); Ini.WriteString('Equalizer','Full Bass & Treble', '|20|20|15|10|13|17|23|25|28|28|'); Ini.WriteString('Equalizer','Full Treble', '|5|5|5|14|17|23|30|30|30|30|'); Ini.WriteString('Equalizer','Laptop Speakers/Headphones', '|17|22|17|14|15|16|17|19|21|23|'); Ini.WriteString('Equalizer','Large Hall', '|22|22|17|17|15|10|10|10|15|15|'); Ini.WriteString('Equalizer','Live', '|9|15|20|20|20|20|20|17|17|17|'); Ini.WriteString('Equalizer','Party', '|20|20|15|15|15|15|15|15|20|20|'); Ini.WriteString('Equalizer','Pop', '|13|17|20|20|17|13|10|10|10|10|'); Ini.WriteString('Equalizer','Reggae', '|15|15|12|9|15|20|20|15|15|15|'); Ini.WriteString('Equalizer','Rock', '|23|20|10|5|13|19|22|25|25|25|'); Ini.WriteString('Equalizer','Ska', '|12|10|10|15|18|21|24|24|25|24|'); Ini.WriteString('Equalizer','Soft', '|20|17|13|11|13|17|21|23|25|27|'); Ini.WriteString('Equalizer','Soft Rock', '|17|17|13|11|9|5|10|15|20|24|'); Ini.WriteString('Equalizer','Techno', '|19|15|12|9|9|15|20|24|24|22|'); sTmp := Ini.ReadString('Equalizer',sEQSetting,sEQSetting); slDelimiter.Delimiter := '|'; slDelimiter.DelimitedText := sTmp; //Equalizer einstellen JvxSlider1.Value := StrToInt(slDelimiter[1]); JvxSlider2.Value := StrToInt(slDelimiter[2]); JvxSlider3.Value := StrToInt(slDelimiter[3]); JvxSlider4.Value := StrToInt(slDelimiter[4]); JvxSlider5.Value := StrToInt(slDelimiter[5]); JvxSlider6.Value := StrToInt(slDelimiter[6]); JvxSlider7.Value := StrToInt(slDelimiter[7]); JvxSlider8.Value := StrToInt(slDelimiter[8]); JvxSlider9.Value := StrToInt(slDelimiter[9]); JvxSlider10.Value := StrToInt(slDelimiter[10]); sTmp := ''; slDelimiter.Clear; slDelimiter.Free; Ini.Free; end |
Re: MemProof Auswerten
Ein Leak fällt mir gleich ins Auge (aua :) )
Du erzeugst slDelimiter immer, aber gibst es nur frei, wenn du die Settings.ini erzeugen musstest. |
Re: MemProof Auswerten
Hallo,
mit memproof habe ich auch angefangen ;) Jetzt benutze ich memcheck (internet), das zeigt dir die Fehler viel genauer an. Heiko |
Re: MemProof Auswerten
Wie benutze ich Memcheck ? hat jemand vielleicht ein Link wo es genau beschrieben wird ?
|
Re: MemProof Auswerten
Hallo,
Die pas mit in dein Quellverzeichnis und dann am besten in der dpr uses {$IFDEF MEMCHECK} MemCheck, {$ENDIF} und dann beim Begin {$IFDEF MEMCHECK} MemChk; {$ENDIF} also Aufruf. Das IFDEF ist von mir, so kann ich dass auch Ausblenden. Nach dem Laufenlassen des Programms wird 1. per Exception zum jeweiligen Problem gesprungen. mit F9 springt man zum nächsten 2. eine Datei XXX_MemCheck.log erzeugt und angezeigt XXX ist die Exe. In der Datei stehen alle leaks. 1. mit Ctrl+C (?) abgebrochen werden, dann ist nur die Datei da. Heiko |
Re: MemProof Auswerten
Oder du nimmst
![]() Hat noch ein paar andere Vorteile gegenüber MemCheck (u.a. das MemCheck nicht mehr weiterentwickelt wird) Und falls du Resourcen-Leaks suchst ist ![]() |
Re: MemProof Auswerten
DANKE für eure Hilfe
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz