Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Memory Leak unter Windows (https://www.delphipraxis.net/190127-memory-leak-unter-windows.html)

Peter666 1. Sep 2016 19:06

Memory Leak unter Windows
 
Hi,

es gibt ein Leak, sobald man Frames nutzt unter Windows. Der Grund liegt hier:


Delphi-Quellcode:
unit FMX.AcceleratorKey.Win;
...
procedure TWinAcceleratorKeyRegistry.RegisterReceiver(const ARoot: IRoot; const AReceiver: IAcceleratorKeyReceiver);
begin
  if FFormRegistry = nil then
    FFormRegistry := TDictionary<IRoot, TAcceleratorKeyReceivers>.Create;
  if ARoot = nil then exit;
...
Da fehlt ein if ARoot = nil then exit;

Peter

Luckie 1. Sep 2016 19:26

AW: Memory Leak unter Windows
 
ARoot wird doch vom Aufrufer übergeben. Also sollte auch der Aufrufer wieder aufräumen. Denke ich. Aber da du den Rest des Codes abgeschnitten hast, sieht man nicht, wie es weiter geht.

EWeiss 1. Sep 2016 19:32

AW: Memory Leak unter Windows
 
if not Assigned(ARoot) then exit;

gruss

CHackbart 1. Sep 2016 19:52

AW: Memory Leak unter Windows
 
Ja, so hab ich das auch gemacht gehabt.

Delphi-Quellcode:
procedure TWinAcceleratorKeyRegistry.RegisterReceiver(const ARoot: IRoot; const AReceiver: IAcceleratorKeyReceiver);
begin
  if FFormRegistry = nil then
    FFormRegistry := TDictionary<IRoot, TAcceleratorKeyReceivers>.Create;
  if not assigned(ARoot) then exit;
 
  if not FFormRegistry.ContainsKey(ARoot) then
    FFormRegistry.Add(ARoot, TAcceleratorKeyReceivers.Create);
  FFormRegistry[ARoot].RegisterReceiver(AReceiver);
end;
Das ist wohl erst seit Berlin der Fall (https://www.google.de/#q=TAcceleratorKeyReceivers+leak) und tritt komischerweise auch auf, wenn man kein & im Text verwendet, um Kürzel zu definieren. Ich habe es damals auch nicht genauer verfolgt, aber beim Suchen nach eigenen Leaks, nervt es dauernd irgendwelche Leckagen von Embarcadero zu finden :oops:

Christian

QuickAndDirty 2. Sep 2016 09:34

AW: Memory Leak unter Windows
 
Die IDE selbst meldet das memory leak?
Kann Delphi XE8 das auch?

uligerhardt 2. Sep 2016 09:38

AW: Memory Leak unter Windows
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1346556)
Die IDE selbst meldet das memory leak?
Kann Delphi XE8 das auch?

Sollte es.
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
ganz vorne beim Programmstart ausführen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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