PrintPreview Resource Leak

Please post bug reports, feature requests, or any question regarding the DELPHI AREA products here.

PrintPreview Resource Leak

Postby MeW » 14/06/16 07:22

In the application I'm using an obscure resource leak occurred. I could not figure out, why my code would be wrong after having been 'Print Previewed'. Until I researched the Preview.pas itself. The TThumbnailPreview destructor does not free the LargeImages. When I added an extra line of code, the resource leaks were gone. So please fix the following:
Code: Select all
destructor TThumbnailPreview.Destroy;
begin
  LargeImages.Free; // <<==-- Add this line to prevent obscure resource leaks
  FPaperViewOptions.Free;
  Page.Free;
  inherited Destroy;
end;
MeW
Active Member
Active Member
 
Posts: 9
Joined: 17/02/05 18:34
Location: Netherlands

Re: PrintPreview Resource Leak

Postby sh17 » 06/07/16 13:18

sh17
Active Member
Active Member
 
Posts: 7
Joined: 03/09/13 11:38

Re: PrintPreview Resource Leak

Postby MeW » 06/07/16 20:59

(Y)
MeW
Active Member
Active Member
 
Posts: 9
Joined: 17/02/05 18:34
Location: Netherlands

Re: PrintPreview Resource Leak

Postby Kambiz » 06/08/16 07:26

There should not be a memory leak, and there was none until Delphi 2010.

The LargeImages object is owned by TThumbnailPrevew instance. In Delphi, owner takes care of freeing the owned components when it is being freed.

Code: Select all
constructor TThumbnailPreview.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if Assigned(AOwner) and (AOwner is TControl) then
    FixControlStyles(TControl(AOwner));
  FZoom := 10;
  FSpacingHorizontal := 8;
  FSpacingVertical := 8;
  FMarkerColor := clBlue;
  FPaperViewOptions := TPaperPreviewOptions.Create;              // This object is not owned by component, so it should be freed implicitly in the destructor
  FPaperViewOptions.OnChange := PaperViewOptionsChanged;
  Page := TBitmap.Create;                                        // This object is not owned by component too, so it should be freed implicitly
  ParentColor := True;
  ReadOnly := True;
  ViewStyle := vsIcon;
  LargeImages := TImageList.Create(Self);                        // "Self" is passed as owner, so "Self" is responsible for freeing the TImageList instance.
  Align := alLeft;
end;

destructor TThumbnailPreview.Destroy;
begin
  FPaperViewOptions.Free;
  Page.Free;
  inherited Destroy;
end;
Kambiz
User avatar
Kambiz
Administrator
Administrator
 
Posts: 2400
Joined: 07/03/03 19:10

Re: PrintPreview Resource Leak

Postby MeW » 06/08/16 08:33

I agree, but the test case I had at hand proved otherwise. Haven't checked any further.. Should I? I've tested this in Delphi 10.1 Berlin.
MeW
Active Member
Active Member
 
Posts: 9
Joined: 17/02/05 18:34
Location: Netherlands

Re: PrintPreview Resource Leak

Postby Kambiz » 07/08/16 08:25

Delphi 2010 was the last version of Delphi that I used for coding. Maybe the way that the owned components are managed is different in the newer versions of Delphi. If it is the case, then there would memory leak in most old components.
Kambiz
User avatar
Kambiz
Administrator
Administrator
 
Posts: 2400
Joined: 07/03/03 19:10


Return to DELPHI AREA Products

Who is online

Users browsing this forum: No registered users and 0 guests