Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MemProof Auswerten (https://www.delphipraxis.net/78490-memproof-auswerten.html)

newuser01 5. Okt 2006 21:12


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

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
Wenn die Anwendung beendet wurde sollte doch eigentlich bei "Resource Count Current" alles auf Null stehen oder :gruebel:?
In den "Resourcen Details" verweist er mich auf folgenden Code

Delphi-Quellcode:
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
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:

chaosben 6. Okt 2006 05:39

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.

hoika 6. Okt 2006 07:04

Re: MemProof Auswerten
 
Hallo,

mit memproof habe ich auch angefangen ;)

Jetzt benutze ich memcheck (internet),
das zeigt dir die Fehler viel genauer an.


Heiko

newuser01 6. Okt 2006 16:53

Re: MemProof Auswerten
 
Wie benutze ich Memcheck ? hat jemand vielleicht ein Link wo es genau beschrieben wird ?

hoika 6. Okt 2006 17:13

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

Bernhard Geyer 6. Okt 2006 20:08

Re: MemProof Auswerten
 
Oder du nimmst FastMM..

Hat noch ein paar andere Vorteile gegenüber MemCheck (u.a. das MemCheck nicht mehr weiterentwickelt wird)

Und falls du Resourcen-Leaks suchst ist AQTime sein Geld wert. Exe mit TD32-Debuginfos kompilieren. In AQTime mit Resourcen-Checker-Option starten. Programm beenden und du hast deine Liste der GDI-Ressourcen-Löcher. Klick auf die Zeile mit dem Resourcenloch liefert dir auch die Position im Code wo diese Ressource angefordert wurde.

newuser01 7. Okt 2006 12:28

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