AGB  ·  Datenschutz  ·  Impressum  







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

String in dll aufräumen

Ein Thema von hanspeter · begonnen am 25. Mär 2010 · letzter Beitrag vom 25. Mär 2010
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

String in dll aufräumen

  Alt 25. Mär 2010, 10:01
Hallo,

kann es sein, das Delphi in einer Dll Strings beim Beenden nicht korrekt aufräumt?
Beim Beenden einer Dll werden grundsätzlich Speicherleak angezeigt.
Dabei sind manchmal bis 50 Unicodestrings und mehrere 20 bis 40 byte große "unknow" Einträge.
Da die dll ohnehin entladen wird, ist das zwar egal. Es sieht aber zumindest
unschön aus.

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.196 Beiträge
 
Delphi 12 Athens
 
#2

Re: String in dll aufräumen

  Alt 25. Mär 2010, 10:14
Zitat von hanspeter:
kann es sein, das Delphi in einer Dll Strings beim Beenden nicht korrekt aufräumt?
eigentlich nicht


Zitat von hanspeter:
Da die dll ohnehin entladen wird, ist das zwar egal. Es sieht aber zumindest
unschön aus.
Ist es nicht.
Blos weil die DLL entladen wird, würde dennoch der Speicher erst beim Beenden der ganzen Anwengung freigegeben.

Aber zum Glück gibt FastMM den gemeldeten und in ihm noch nicht freigegebenen Speicher, nach der Anzeigen frei.
(Speicher, welcher nicht über FastMM reserviert und nicht freigegeben wurde wird nie angezeigt ... dazu zehlen z.B. WideStrings, bei welchen an der Speicherverwaltung aka der automatischen Freigabe manipuliert wurde)


Nutzt du Strings, dynamische Array, Objekte oder Dergleichen über die DLL-Grenze hinweg, z.B. als Parameter oder Funktionsergebnis drüben in der EXE?

Wenn ja:
- sowas macht man nicht (jedenfalls nicht ohne einen SharedMM)
- tja, dann liegt es an der Referenzzählung des Strings und in der EXE, zu diesem Zeitpunkt, noch existierender Referenzen.

Auch noch nicht freigegebene Intefaces könnten hier Probleme bereiten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: String in dll aufräumen

  Alt 25. Mär 2010, 10:31
Zitat von himitsu:
Zitat von hanspeter:
kann es sein, das Delphi in einer Dll Strings beim Beenden nicht korrekt aufräumt?
eigentlich nicht
Wenn ich an das hier denke, würde ich die Bedenken des TE durchaus teilen.
Habe aber grad keine Zeit nachzusehen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.196 Beiträge
 
Delphi 12 Athens
 
#4

Re: String in dll aufräumen

  Alt 25. Mär 2010, 10:42
Das in Speicherleck in MakeObjectInstance wird nicht über den Delphi-Speichermanager erstellt und kann demnach nicht von FastMM gemeldet werden.

Dieses Speicherleck wird direkt in der prozessinternen Speicherverwaltung von Windows (über VirtualAlloc) erzeugt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

Re: String in dll aufräumen

  Alt 25. Mär 2010, 12:34
Zitat von himitsu:
Nutzt du Strings, dynamische Array, Objekte oder Dergleichen über die DLL-Grenze hinweg, z.B. als Parameter oder Funktionsergebnis drüben in der EXE?

Wenn ja:
- sowas macht man nicht (jedenfalls nicht ohne einen SharedMM)
- tja, dann liegt es an der Referenzzählung des Strings und in der EXE, zu diesem Zeitpunkt, noch existierender Referenzen.
Ja ich nutze String und alles was "macht man nicht" aufzählt als Aufrufparameter. Das geht problemlos.
Allerdings werkelt an der Schnittstelle ein Marschaller. - (Remobjects Hydra-Plugin).
Ich schließe eine Instanz und führe anschließendexplizit ein Unload für die dll aus.
Beim Schließen des Rahmenprogramms kommen dann die Speicherleak Meldungen.
(Das Rahmenprgramm hat keine Funktionalität und stellt nur ein Panel als Container für die dll bereit.

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: String in dll aufräumen

  Alt 25. Mär 2010, 12:41
@himi, ich weis doch, dass das nicht dasselbe ist. Aber du warst dir halt spontan so sicher, dass Delphi da schon alles richtig macht. Das war nur ein Beispiel, dass Delphi eben nicht alles richtig macht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 06:40 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