AGB  ·  Datenschutz  ·  Impressum  







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

Dateien vegleichen belegt zu viel speicher!

Ein Thema von ATwardz · begonnen am 3. Okt 2003 · letzter Beitrag vom 3. Okt 2003
Antwort Antwort
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#1

Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 17:44
Hi,

ich benutze folgenden Code um zwei Dateien zu vergleichen!

Delphi-Quellcode:
Function Tform1.AreFilesEqual( Const file1, file2: String ): Boolean;
Var
  m1, m2: TMemoryStream;
Begin
  Result := False;
  m1 := TMemoryStream.Create;
  try
    m1.LoadFromFile( file1 );
    m2:= TMemoryStream.Create;
    try
      m2.LoadFromFile( file2 );
      If m1.size = m2.size Then
        Result := CompareMem( m1.Memory, m2.memory, m1.size );
    finally
      m2.free;
    end;
  finally
    m1.free;
  end
End;
Mittels Listbox und While-Schleife vergleiche ich so Mehrere Dateien!
Mein Problem ist das das Programm zu viel Speicher einnimmt!

Meine Frage wie kann ich nur die belgeten bytes wieder freigeben bevor die Procedure noch läuft?

Vielen Dank für Hilfe im Vorraus!

@wardz

T-2 Tage
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#2

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 17:49
Delphi-Quellcode:
  i:=0;
  While i<Listbox2.Count do
  Begin
    u:=0;
    While u<Listbox2.Count-1 do
    Begin
      If i<>u then
      Begin
        If Arefilesequal(Listbox2.Items.Strings[i],Listbox2.Items.Strings[u])=true then
        Begin
          Listbox4.Items.Add(Listbox2.Items.Strings[u]);
          Listbox2.Items.Delete(u);
          u:=Listbox2.Count-1;
          i:=0;
        end;
      end;
        u:=u+1;
    end;
    i:=i+1;
  end;
Wie kann ich nun den belegten speicher nach beendigen der inneren Schleife wieder freigeben während die
Procedure noch läuft?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 18:03
Ich würde Dir empfehlen die Dateien Blockweise einzulesen, so brauchst Du auch immer nur diese kleinen Blöcke zu vergleichen und im Speicher zu halten
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#4

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 18:07
Wie meinst du das blockweise?
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#5

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 18:14
ES wird ja quasi immer eine Datei mit allen anderen nach der reihe verglichen!
Würde das was ändern wenn ich eine DAtei mit allen vergleiche, dies in eine
Procedure packen würde und diese mit einer For Schleife für jede DAtei neu aufrufe?
Ich dachte das das nix ändern würde!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 18:27
Es gibt auch noch eine andere Möglichkeit, sie speziell dann Sinn macht, wenn du Dateien mit mehereren Dateien vergleichen willst: Du erstellst dir von jeder Datei einen Hashwert (Such dazu hier mal nach Hier im Forum suchenMD5 und vergleichst diesen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 18:28
Ein blockweiser Vergleich heißt: Lies einen Block aus der ersten Datei ein, dann einen aus der zweiten und vergleiche diese. Lies dann aus beiden Dateien den nächsten Block ein etc., bis entweder eine der Dateien zu ende ist oder ein Unterschied gefunden wurde. Dabei kann ein Block zum Beispiel 4KB oder auch 1MB groß sein, das ist deine Sache. In Delphi ist dazu glaube ich z.B. BlockRead geeignet (Überraschung (C; ).

Edit: Aber Chewies Methode ist, wenn du mehrere Dateien untereinander vergleichen willst, natürlich auch sinnvoll. Wenn die Dateien alle unterschiedlich sind, ist sie allerdings unter Umständen langsamer. Auch ein vorheriger Größenvergleich macht daher Sinn, denn ungleich große Dateien sind niemals gleich.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
ATwardz

Registriert seit: 12. Mai 2003
205 Beiträge
 
Delphi 7 Professional
 
#8

Re: Dateien vegleichen belegt zu viel speicher!

  Alt 3. Okt 2003, 20:38
Hmmmmm ja, das mit dem HAshen war mir bis vor ein paar Miuten noch ganz neu und ich arbeite mich gerade hinter das Prinzip, hab leider noch kein sehr hilfreiches Tut gefunden immer nur Bruchstücke aus quelltexten!

Weiss,hat jemand ein gutes Tut über hashing???
Wenn ja, wäre sehr dankbar!

@wardz
  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 07: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