AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Button frisst Speicher?

Ein Thema von EmWieMichael · begonnen am 5. Feb 2019 · letzter Beitrag vom 7. Feb 2019
Antwort Antwort
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#1

Button frisst Speicher?

  Alt 5. Feb 2019, 10:40
Moin!

Bei der Entwicklung eines Fenstermanagers ist mir aufgefallen, dass nach Create, Show und Release eines Formulars laut "GetMemoryManagerState" (TotalAllocatedMediumBlockSize) mehr Speicher vom Programm genutzt wird, als vor dem Aufruf des Formulars; und zwar 3.628 Bytes. Dabei ist es unerheblich, ob das Fenster nur einmal oder auch ein Dutzend mal gleichzeitig angezeigt wird.
Als Verursacher konnte ich TAdvGlowButton von TMS identifizieren. Einen kurzen Blick in den Quellcode des Buttons habe ich schon gewagt, muss aber zugeben, dass meine Kenntnisse in Sachen Komponentenentwicklung nicht ausreichen, um hier zielführend weiterzukommen .

Ist das Verhalten der Buttonkomponente 'normal'? Oder sollte man besser auf den Einsatz verzichten?

Michael
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Button frisst Speicher?

  Alt 5. Feb 2019, 10:50
Du machst dir einen Kopf weil da einmalig ca. 3KB Speicher benötigt wird?

Für mich hört sich das nach einer Bitmap-Resource (evtl. der Glow-Effect) an, die von nun an im Speicher gehalten wird, und diese wird für alle (auch zukünftigen) Button-Instanzen verwendet (um Speicher zu sparen und die Performance zu steigern)

Geändert von Schokohase ( 5. Feb 2019 um 10:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Button frisst Speicher?

  Alt 5. Feb 2019, 10:53
Finde ich in Ordnung.

@Michael: das kann man im Prinzip leicht feststellen indem Du den Button gegen einen Standardbutton austauschst, oder?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#4

AW: Button frisst Speicher?

  Alt 5. Feb 2019, 11:06
Vermutlich mache ich mir tatsächlich unnötig einen Kopf, das mag schon sein. Aber ich würde ganz gerne verstehen, warum der Speicher nicht sauber aufgeräumt wird. Eigentlich (!) bin ich bisher davon ausgegangen, dass mit einem TForm.Release alles aus dem Speicher entfernt wird, was durch die Form erzeugt wurde (Und jetzt wackelt mein Weltbild ).
Die Frage nach dem Standardbutton: Ja, mit dem Standardbutton - oder auch mit anderen TMS-Buttons - wird der Speicher wieder auf Ausgangsgröße zurückgesetzt.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Button frisst Speicher?

  Alt 5. Feb 2019, 11:28
Aber ich würde ganz gerne verstehen, warum der Speicher nicht sauber aufgeräumt wird
Solange Du den Code nicht gelesen und das Leak gefunden hast, ist kein Urteil in Sachen "sauber" mMn unangebracht.

Wie oben schon geschrieben wurde: unter Umständen cached die Button-Klasse (nicht das Objekt) etwas, und wenn dieser Cache dann neu geöffnete weitere Fenster sich ein paar Millisekunden schneller öffnen lässt, ist das unter Umständen mehr wert als 3 KB Arbeitsspeicher.

Ich verwende in Debug-Versionen immer heaptrc (FreePascal), das loggt bei mir Beenden alle Memory Leaks. Etwas ähnliches gibt es doch auch in Delphi. Im Zweifel würde Dir das wohl auch ausspucken, in welcher Datei und welcher Zeile dieser Cache aufgebaut wird (wenn er nicht bei Programmende ordentlich zerstört wird).

Geändert von CCRDude ( 5. Feb 2019 um 11:30 Uhr)
  Mit Zitat antworten Zitat
5. Feb 2019, 11:33
Dieses Thema wurde am "05. Feb 2019, 11:33 Uhr" von "Luckie" aus dem Forum "Algorithmen, Datenstrukturen und Klassendesign" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Button frisst Speicher?

  Alt 5. Feb 2019, 12:31
Bei Delphi gibt es Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown, das setzt man am Anfang in den Projektquelltext.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#8

AW: Button frisst Speicher?

  Alt 7. Feb 2019, 20:39
Genau: in die dpr deines Projektes gehen und als erste Zeile nach dem begin das reinschreiben:

ShowMemoryLeaksOnShutdown := true;

Wenn's welche gibt, gibt's bei Programmende ein Fensterchen mit Daten dazu.
Wer's jedoch wirklich genau wissen will, lädt die komplette FastMM4 Version runter,
stellt die include Datei richtig ein (da legt man das Verhalten fest) und kann dann
durch fastMM4 im Uses das einbinden und sogar sehen wo das leakende Objekt erzeugt worden ist...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz