AGB  ·  Datenschutz  ·  Impressum  







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

Dublikat entfernen zu zeitintensiv

Ein Thema von goodvirus · begonnen am 31. Mär 2005 · letzter Beitrag vom 1. Apr 2005
Antwort Antwort
Benutzerbild von goodvirus
goodvirus

Registriert seit: 24. Aug 2004
Ort: Bremen
54 Beiträge
 
Delphi 7 Enterprise
 
#1

Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 17:41
Moin,
Ich hab schon ne ganze Zeit net mehr in delphi geproggt, brauchte jetzt aber just mal ein kleines Programm.
Ich habe eine Textdatei die ca 90 Mb groß ist.
In jeder Zeile steht ein Wort, Zahl oder Einige sonderzeichen(kann auch alles vermischt sein)
Nun wollte ich alle doppelten Einträhe entfernen. Dazu hab ich mir einfach mal aus einem meiner alten Delphiprojekte ein kleinen Codeschnipzel genommen.
Delphi-Quellcode:
var sl: TStringlist;
begin
sl:=TStringlist.Create;
try
  SL.Sorted := true;
  SL.Duplicates := dupIgnore;
  SL.LoadFromFile('zusammen.txt');
  Sl.SaveToFile('fertig.txt');
finally
sl.Free;
Dies sollte eigentlich alle doppelten Einträge herausfiltern. Tut es auch wenn ich mit kleinen Dateien arbeite.
Nun mach ich es aber bei der 90 MB Datei und mein Pc (1,8 GHz) rennt schon seit ca 2 Stunden.
Nun meine Frage(n):
Ist hier ein Fehler im Code?
Kann man dies Optimieren?
Mit welcher Methode sortiert eigenlich Delphi?(also bei diesem Beispiel)

Schon mal im voraus vielen Dank
MfG goodvirus
Es ist schlimmer einen Freund zu mißtrauen als von ihm entäuscht zu werden.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 18:20
Wieviel Speicher hat dein Rechner und wieviel Speicher braucht die Anwendung? Evtl. ist Windows nur am Swappen so das die eigentliche Bremse evtl. erst mal das Einlesen ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#3

Re: Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 18:24
Delphi-Quellcode:
var sl: TStringlist;
begin
sl:=TStringlist.Create;
try
  SL.Sorted := true;
  SL.Duplicates := dupIgnore;
  SL.LoadFromFile('zusammen.txt');
  SL.Sort;
  Sl.SaveToFile('fertig.txt');
finally
sl.Free;
Versuchs mal so!
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von goodvirus
goodvirus

Registriert seit: 24. Aug 2004
Ort: Bremen
54 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 18:37
Also ich hab 255 MB DDR-Ram 1,8 Ghz Pc. Hab sonst nix großes im hintergrung laufen.
Mein prog verbraucht laut Taskmanager ca 120 MB.
@Moritz dein Code bringt keine veränderung, da sobald die liste eingelesen wird automatisch sortiert und nach dublikaten gegkuckt wird durch:
Delphi-Quellcode:
  SL.Sorted := true;
  SL.Duplicates := dupIgnore;
Und das zusätzliche:
SL.Sort; bringt da eigentlich nix ^^

Ich habe jetzt nach einigem rumprobeiren, herausgefunden das das sortieren nur wenig Zeit in anspruch nimmt!
Das Dublikate suchen an sich(wenn wer nicht weiß wie dies delphi macht schreib ich das gern) is der Hautanteil der Arbeit.

MfG goodvirus
Ps: Thx für die schnelle Hilfe
hab jetzt erstmal abgebrochen bis ich ne Lösung gefunden hab
Es ist schlimmer einen Freund zu mißtrauen als von ihm entäuscht zu werden.
  Mit Zitat antworten Zitat
Benutzerbild von goodvirus
goodvirus

Registriert seit: 24. Aug 2004
Ort: Bremen
54 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 19:27
Problem gelößt, auf ganz wundersame weise....
Ich habe eigentlich nichts groß am code geändert, aber auf einmal hats innerhalb 1 min geklapt!
Delphi-Quellcode:
sl:=TStringlist.Create;
try
  sl.Sorted:=True;
  SL.Duplicates := dupIgnore;
  Application.ProcessMessages;
  SL.LoadFromFile('zusammen.txt');
  Application.ProcessMessages;
  Sl.SaveToFile('fertig.txt');
  Application.ProcessMessages;
  ShowMessage('Liste gespeichert');
finally
sl.Free;
MfG goodvirus Thx für die Hilfe
Es ist schlimmer einen Freund zu mißtrauen als von ihm entäuscht zu werden.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Dublikat entfernen zu zeitintensiv

  Alt 31. Mär 2005, 21:17
Ich sag es ist trotzdem ein Speicherproblem.

Du sagst das Programm benötigt 120 MB - Welche Speicherangabe meist Du damit? Speicherauslastung oder Virtueller Speicher?

Die implementierung von LoadFromFile ist nicht gerade optimal: Erst wird die Datei komplett in den Speicher geladen (90 MB) und anschließend die Stringlist aufgebaut (~ 90 MB) und anschließend gespeichert (90 MB). Und vermutlich kommt ohne Application.ProcessMessages Windows nicht dazu die ersten 90 MB wieder freizugeben. Und bei deinen damit mickrigen 256 MB (Windows braucht ja auch Speicher) wird Windows nur noch am Swappen sein.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Dublikat entfernen zu zeitintensiv

  Alt 1. Apr 2005, 00:28
Wenn die Implementierung von LoadFromFile nicht so optimal ist, könnte man das ganze doch "von Hand" einlesen lassen, z.B. mit Hilfe eines Streams. Oder ist das auch nicht besser?

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  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 23:40 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