Announcement

Collapse
No announcement yet.

Wie kann man Arbeitsspeichers freigeben...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann man Arbeitsspeichers freigeben...

    Hallo,

    Ich habe ein Problem mit einem Programm, welches eine ListView mit über 5.000 (und mehr) Einträgen verwaltet. Die Liste wird beim Aufruf des Programmes aus einer Datei gelesen, in die besagte Liste eingetragen, gegebenenfalls Einträge hinzugefügt, aktualisiert oder entfernt und später wieder gespeichert und das während der Windows-Session.

    Nach einer Weile kommt aber eine Fehlermeldung, dass nicht genügend Arbeitsspeicher zum Ausführen [eines] Programmes vorhanden ist und dazu kommt noch, dass beim Schließen etwa 10 Sekunden vergehen.
    Ich denke, dass diese Meldung durch die lange Liste entstanden und bei Windows kein Speicher mehr frei ist.

    Wie könnte ich nun den Arbeitsspeicher wieder freigeben?

    Tschüss...

  • #2
    Hallo Tim,<br>bei 5000 und mehr TListvieweinträgen, gehe ich mal davon aus, dass Du mit OwnerData arbeitest. Wenn das stimmt, wo, wann und wie werden die einzelnen Elemente freigegeben. Ein bißchen Quelltext wäre hilfreich.<br>:-) Jens Schuman

    Comment


    • #3
      Hallo Jens,

      Um Speicherplatz zu sparen, habe ich einen Komponenten (THKStreams v1.6 by Harry Kakoulidis 12/1999) verwendet, bei dem der Inhalt wie folgt eingelesen wird (genauer source, siehe THKStreams,
      falls n.v. --- fragen):

      <pre>
      try
      ListBox1.HKS.LoadFromFile('C:\Test.txt');
      except
      on ECorruptFile do exit;
      on EStreamError do exit;
      end;

      ms:= TMemoryStream.Create;
      try
      HKS.GetStream('EinString',ms);
      ListBox1.Items.LoadFromStream (ms);
      ms.clear;

      HKS.ClearStreams;
      finally
      ms.free;
      end;
      </pre>

      ... und zum speichern:

      <pre>
      ms:= TMemoryStream.Create;
      try
      ListBox1.items.SaveToStream(ms);
      HKS.AddStream('EinString',ms);
      ms.Clear;

      HKS.SaveToFile('C:\Test.txt');
      HKS.ClearStreams;
      finally
      ms.free;
      end;
      </pre>

      Tschüss..

      Comment


      • #4
        Hallo Tim,<br>die THKStreams sind mir unbekannt. Wo kommt denn TListview ins Spiel?<br>:-) Jens Schuman

        Comment


        • #5
          Hallo,

          Entschuldigung, ich habe mich bei meinem ersten Eintrag verschrieben, es geht um <b>ListBox</b> und nicht um ListView, obwohl es bei diesen auch interressant wäre.

          Wenn es nicht anders gehen sollte, kann ich den Quelltext hier hineinschreiben, da es aber sehr viel ist, könnte man sich diesen auch unter <a href="http://www.torry.net/vcl/vcltools/streams/hkstrm.zip">http://www.torry.net/vcl/vcltools/streams/hkstrm.zip</a> herunterladen.

          Tschüss..

          Comment

          Working...
          X