AGB  ·  Datenschutz  ·  Impressum  







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

FMX: Memory Leak: TMemo

Ein Thema von BlackSeven · begonnen am 21. Nov 2011 · letzter Beitrag vom 21. Nov 2011
Antwort Antwort
BlackSeven

Registriert seit: 25. Sep 2004
79 Beiträge
 
Delphi XE7 Professional
 
#1

FMX: Memory Leak: TMemo

  Alt 21. Nov 2011, 09:18
Folgender Code verursacht Memory Leaks:

Memo.Lines.Add('Test');

TTextServiceWin
TLineMetricInfo

Kann das jemand reproduzieren?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: FMX: Memory Leak: TMemo

  Alt 21. Nov 2011, 11:09
Inkl Update 2?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
BlackSeven

Registriert seit: 25. Sep 2004
79 Beiträge
 
Delphi XE7 Professional
 
#3

AW: FMX: Memory Leak: TMemo

  Alt 21. Nov 2011, 11:26
Hallo Stefan,

Update 2 ist drauf.
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

AW: FMX: Memory Leak: TMemo

  Alt 21. Nov 2011, 12:09
Das ist nicht nur das Lines.Add, sondern das Memo selber bzgl des TextService, ein blick in die Sourcen zeigt, das FTextService, sowie MetricLineInfo dort nicht freigeben werden. Ich lege dort mal ein QC-Eintag (QC#101188 für an.

TextService:

Delphi-Quellcode:
constructor TMemo.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTextService := Platform.GetTextServiceClass.Create(self, True);
end;

destructor TMemo.Destroy;
begin
  if FUnwrapLines <> nil then
    FUnwrapLines.Free;
  FSelectionFill.Free;
  FFontFill.Free;
  FFont.Free;
  FActionStack.Free;
{$IFNDEF NOVCL}
  FMemoPopupMenu.Free;
{$ENDIF}
  FLines.Free;
  inherited;
end;

MetricLineInfo:

Delphi-Quellcode:

function TMemo.FillLocalLinesBegs(PText: PString; ABegChar, AEndChar: Integer;
  TmpLinesBegs: PLinesBegins): Integer;
var
  S: string;
  TmpSWidth: Single;
  LLongestLineWidth: Single;
  i: Integer;
  LMetrics: TLineMetricInfo;
begin
  Result := 0;
  SetLength(TmpLinesBegs^, 0);

  if PText^ = 'then
    Exit;

  LMetrics := TLineMetricInfo.Create;

  S := Copy(PText^, ABegChar, AEndChar - ABegChar + 1);

  Canvas.Font.Assign(Font);
  Canvas.MeasureLines(LMetrics, ContentRect,
    S, FWordWrap, FillTextFlags, TTextAlign.taLeading, TTextAlign.taLeading);

  if LMetrics.Count = 0 then
  begin
    // no date??? Error??
// Result := 0;
// SetLength(TmpLinesBegs^, 0);
  end
  else
  if LMetrics.Count = 1 then
  begin
    // Single line
    Result := 0;
    SetLength(TmpLinesBegs^, 0);
  end
  else
  begin
    // New lines are coming.
    SetLength(TmpLinesBegs^, LMetrics.Count - 1);
    LLongestLineWidth := TextWidth(Copy(S, 1, LMetrics.Metrics[0].Len));
    Result := 0;
    for i := 0 to LMetrics.Count - 2 do
    begin
      TmpLinesBegs^[i] := LMetrics.Metrics[i+1].Index - 1 + ABegChar;
      TmpSWidth := TextWidth(Copy(S, LMetrics.Metrics[i+1].Index, LMetrics.Metrics[i+1].Len));
      if TmpSWidth > LLongestLineWidth then
      begin
        LLongestLineWidth := TmpSWidth;
        Result := i;
      end;
    end;
  end;
end;
Lars

Geändert von daywalker9 (21. Nov 2011 um 12:19 Uhr)
  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 12:59 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