Einzelnen Beitrag anzeigen

AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#30

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 12. Aug 2010, 11:27
@Neutral General: Das mein PAnsiString nicht initialisiert ist oder auf Müll zeigt, würde ich jetzt erstmal für mich ausschließen da das besagte Problem nur sporadisch auftritt und nicht so einfach zu greifen ist.

Ich denke schon die ganze Zeit nach, ob es nicht wirklich "einfach" nur an der Fragementierung liegt.
Habe jetzt mal folgendes getestet:

Delphi-Quellcode:
var
  i: Integer;
  a: AnsiString;
begin
  try
    i := 1;
    while True do
    begin
      SetLength(a, i);
      i := i * 2;
    end;
  except
    //DoAnything...
  end;
end.
Hier ist laut TaskManager ganz eindeutig zu sehen, dass der Speicher anwächst.

Jetzt eine kleine Änderung und man sieht im TaskManager den Speicher nicht mehr ansteigen...

Delphi-Quellcode:
var
  i: Integer;
  a: AnsiString;
begin
  try
    i := 1;
    while True do
    begin
      SetLength(a, 0); //<---- NEU
      SetLength(a, i);
      i := i * 2;
    end;
  except
    //DoAnything...
  end;
end.
Habe mir grade mal ein Programm geschrieben, was mir permanent über MessageQueue Nachrichten an einen Thread schickt mit der Übergabe eines PAnsiString und anschließender Freigabe. Ich teste das ganze jetzt mal nur mit dem SetLength (also ohne vorher das "SetLength(xxx,0)" und gucke mir das mal im TaskManager an.
Ein Timer schickt alle 1,5 sek ein Telegramm an den Thread und dieser macht mit dem Telegramm erstmal gar nichts. Ist für mich nur zum testen...

Habt ihr noch Ideen / Anreize / Vorschläge?

Viele Grüße
Alex
  Mit Zitat antworten Zitat