Einzelnen Beitrag anzeigen

hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

IntraWeb - Speichernutzung

  Alt 8. Jun 2007, 07:49
'loha Folks,

ein relativ umfangreiches IntraWeb (Webapplikation) Projekt füllt nach und nach den Speicher. Dies ist wohl aus zur Laufzeit erstellte Komponenten, von welchen es einige gibt, zurückzuführen. Nun wollte ich mich erkundigen, was beispielsweise mit folgendem Konstrukt geschieht wenn das dazugehörige Formular geschlossen wird:

Delphi-Quellcode:
procedure TfrmFacility_Management_Door_Control_Select.grdDeviceRenderCell(
  ACell: TIWGridCell; const ARow, AColumn: Integer);
begin
{
  Title Row Sort Symbols
}

  if (ARow = 0)
    and (AColumn >= 0)
    and (AColumn < grdDevice.Columns.Count -1) then
  begin
    with ACell do
    begin
      Control := TIWImageFile.Create(Self); // hier wird ein Control kreiert, welches natürlich den Speicher nutzt
      with TIWImageFile(Control) do
      begin
        Hint := 'Sortieren';
        Tag := AColumn;
        UserSession.SetSortImage(UserSession.DataSet, TIWDBGridColumn(grdDevice.Columns.
          Items[(TIWImageFile(Control)).Tag]).DataField, TIWImageFile(Control));
        OnClick := Sort;
      end;
    end;
  end;
end;
Beim verlassen der Seite wird das Formular mit der Release Methode entfernt und sollte demnach den von ihm belegten Speicherplatz wieder freigeben. Nun meine ich, dass wenn sämtliche zur Laufzeit erzeugten Komponenten dem Formular angehören (Create(Self)), werden diese automatisch mit dem Schliessen des Formulares aus dem Speicher entfernt. Wenn ich jetzt allerdings sagen wir 100 User Sessions öffne, und in jeder dieser Sessions eine umfangreiche Seite lade (auf welcher viele solche zur Laufzeit erzeugten Komponenten verwendet werden), wird der speicher erwartungsgemäss gefüllt. Werden anschliessend sämtliche User Sessions beendet, somit alle Formulare und sonstigen Daten eines Users "zerstört", so nimmt die Speicherausnutzung nicht in dem Masse ab, wie ich das eigentlich erwarten würde.

Nun bin ich mir nicht sicher, ob denn die Eltern auch wirklich für ihre Kinder haften?!

Viel anderes wird zur Laufzeit nicht erzeugt und wenn, dann fast ausschliesslich mit dem Formular als Owner. Manche vom User unabhängig agierende Threads gibt es noch, welche ein recht dynamisches Leben führen, sich aber alle beim Terminieren selbst wieder freigeben.

Weiss jemand Rat?

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat