AGB  ·  Datenschutz  ·  Impressum  







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

Speicher Problem

Ein Thema von Pseudemys Nelsoni · begonnen am 13. Sep 2004 · letzter Beitrag vom 13. Sep 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Speicher Problem

  Alt 13. Sep 2004, 16:40
hi,

irgendwie wird ziemlich viel Speicher verbraucht wenn ich meine prozedur (kommt gleich) auf meinem programm ausführe...

siehe Anhang.



was kann ich dagegen tun?

Ich Überschreibe das OnPaint ereignis meiner Form und so sieht die Prozedur aus:

Delphi-Quellcode:
procedure TForm2.Paint;
var
  sl: TStringList;
  txt: TextFile;
  s: string;
begin
  inherited;
  if fFirstPaint then
  begin
    fFirstPaint := false;
    sl := TStringList.Create;
    try
      AssignFile(txt, ExtractFilePath(Application.ExeName)+'test.txt');
      Reset(txt);
      while not EOF(txt) do
      begin
        ReadLn(txt, s);
        sl.Add(s);
        Caption := 'Geladene Zeilen...' + IntToStr(sl.Count);
        Application.ProcessMessages;
      end;
      Caption := IntToStr(sl.Count) + ' Zeilen geladen';
    finally
      sl.Free;
    end;
  end;
end;
ok die textdatei selbst ist 76MB gross...

aber wieso verbrauche ich dann 110MB speicher? gibt es da ne lösung irgendwie? was wäre passiert wenn jemand nur 32mb ram hätte?
Miniaturansicht angehängter Grafiken
hm_158.jpg  
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Speicher Problem

  Alt 13. Sep 2004, 16:46
Hoi

Der höhere Speicherverbrauch kommt daher, dass eine StringList ja aus lauter Strings besteht, welche die Zeilen darstellen. Und somit kommt zu deinen 76 MB Daten noch für jede Zeile 8 Bytes hinzu (Längenangabe und Reference Counter). Je nachdem wieviele Zeilen Du hast, macht das etwas aus...

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Speicher Problem

  Alt 13. Sep 2004, 16:48
hm, danke erstmal.

also kann ich nur jedem raten keine grossen textdateien einzufügen?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Speicher Problem

  Alt 13. Sep 2004, 16:56
Brauchst Du wirklich alles auf einmal und könntest die Datei nicht blockweise einlesen?
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Speicher Problem

  Alt 13. Sep 2004, 16:58
jo, brauche alles...

das schlimme ist ja das ich damit noch arbeiten muss... also jede zeile prüfen ob irgendetwas darin vorkommt.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Speicher Problem

  Alt 13. Sep 2004, 17:01
Dann mach es ohne StringList und lade es in einen einfachen String... Ist halt nicht mehr so komfortabel, aber es soll einem ja auch nicht eintönig werden

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Speicher Problem

  Alt 13. Sep 2004, 17:06
Zitat von Pseudemys Nelsoni:
jo, brauche alles...

das schlimme ist ja das ich damit noch arbeiten muss... also jede zeile prüfen ob irgendetwas darin vorkommt.
Wie so brauchst du denn dann alles? lad die ersten 500 Zeilen, berabeite sie, dann lädst du die nächsten 500 Zeilen unsw.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#8

Re: Speicher Problem

  Alt 13. Sep 2004, 17:08
Ich weiß nichtmal, was das ganze überhaupt soll.
Beim ersten Zeichnen der Form liest du eine Datei in eine Stringlist ein und schmeißt diese Daten anschließend wieder weg. Zusätzlich zeigst du dem Benutzer schön an, wieviele Zeilen du bisher schon geladen hast, die du anschließend ins Nirvana schicken wirst.
Effektiv was tun tust du also nicht. Das tust du aber schon beim starten des Programmes, wenn die Form zum ersten Mal gezeichnet wird.
Wäre es nicht sinnvoller, sowas anzuzeigen, wenn du auch wirklich was mit den eignelesenen Daten machst?

Edit: Vergesst es, ich sollte mich nicht ablenken lassen und 10 Minuten brauchen, um 5 Zeilen zu schreiben...
  Mit Zitat antworten Zitat
Thebe

Registriert seit: 26. Jul 2004
Ort: Wedel
78 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Speicher Problem

  Alt 13. Sep 2004, 17:59
Ich würds so machen:

Delphi-Quellcode:
procedure TForm2.Paint;
var
  sl: TStringList;
  txt: TextFile;
  s: string;
begin
  inherited;
  if fFirstPaint then
  begin
    fFirstPaint := false;
    sl := TStringList.Create;
    try
      Caption := 'Datei wird eingeladen...';
      Application.ProcessMessages;
      sl.LoadFromFile(s);
      Caption := IntToStr(sl.Count) + ' Zeilen geladen';
    finally
      sl.Free;
    end;
  end;
end;
Dann sparst Du dir das lahme Einlesen von Zeile für Zeile aus der Datei, Du benutzt sowieso StringList, da kann man das auch gleich so machen. Wenn die gesamte Datei zur gleichen Zeit im Speicher sein muss haste keine andere Chance RAM zu sparen.
  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 03:00 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