AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DoubleSource - Duplikate im Source finden v0.4.1
Thema durchsuchen
Ansicht
Themen-Optionen

DoubleSource - Duplikate im Source finden v0.4.1

Ein Thema von Motzi · begonnen am 5. Mär 2008 · letzter Beitrag vom 15. Mär 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Motzi
Motzi
Registriert seit: 6. Aug 2002
Hi,

erstmal vorweg - ich weiß, dass es so ein Programm vor kurzem schonmal hier gab (DupeChecker). Tatsächlich hat mich dieses Programm sogar dazu inspiriert meine eigene Version zu schreiben, da ich in einigen Punkten nicht ganz glücklich damit war (siehe dazu mein Posting im Thread zu dem Programm).
Ich habe daher beschlossen mein eigenes Programm zu schreiben und versucht die von mir kritisierten Punkte zu verbessern.

Features:
  • Sehr schnelle Duplikatssuche
  • Kommentare werden vor dem Vergleichen entfernt -> unterschiedliche Kommentare in identischen Codeblöcken spielen keine Rolle mehr; auskommentierter Code wird nicht als Duplikat erkannt
  • "Überflüssige" Leerzeichen werden vor dem Vergleichen ebenfalls entfernt (aus "i : integer ;" wird "i:integer;") -> Unterschiede in der Formatierung werden ignoriert
  • Übersichtliche Aufbereitung der Ergebnisse in einem Treeview
Anmerkung: Treeview Einträge die kursiv sind sind "Subduplikate", sie sind also ein Teil eines größeren Duplikats. Diese werden nur dann angezeigt, wenn sie identisch mit anderen gefundenen Dupliakten sind, die selbst keine Subdupliakte sind.

v0.4.1
  • Speicherverbrauch wurde drastisch gesenkt
  • Geschwindigkeit wurde um das 4-5 fache gesteigert
  • Rekursive Suche in Unterordnern kann optional deaktiviert werden
  • Comboboxen wurden durch "erweiterte" Versionen ersetzt
  • Es wird nun überall der volle Pfad als Hint angezeigt

v0.3.1
  • Analyse findet nun in einem eigenen Thread statt und kann abgebrochen werden
  • Geschwindigkeit wurde nochmals gesteigert
  • Speicherverbrauch wurde deutlich reduziert
  • Splitter-Problem beseitigt
  • Die Schriftart des Treeview wurde auf Verdana umgestellt - damit gibt es keine Probleme mit den kursiven Zahlen mehr.

v0.2.2
  • Es gibt jetzt eine SettingsForm - die Einstellungen werden in einer ini-Datei und einer txt-Datei gespeichert (siehe weiter unten)
  • Alle Sources eines Duplikats können nun in einem eigenen Fenster direkt verglichen werden
  • Sowohl im "Compare-Fenster" als auch in der MainForm werden die Duplikate im Source durch eine eigene Hintergrundfarbe gekennzeichnet
  • Duplikate die nur aus Keywords bestehen können ignoriert werden
  • Geschwindigkeit wurde um das bis zu 4-fache beschleunigt
Folgende Einstellungen sind möglich:
  • Minimale Zeilenanzahl
  • Extensions der Files die beim Durchsuchen von Ordnern berücksichtigt werden sollen
  • Ignorieren von Duplikaten die nur aus Keywords bestehen
  • Es sollen nur Zeilen gezählt werden die nicht nur aus einem Keyword bestehen (betrifft minimale Zeilenanzahl)
  • Liste der Keywords die ignoriert werden sollen - betrifft die beiden obigen Einstellungen (diese List wird in keywords.txt gespeichert)

v0.1.2
  • Das Programm kann jetzt auch für ganze Ordner angewendet werden. Dabei werden alle pas und dpr Files aus dem gewählten Ordner und allen Unterordnern zur Duplikatssuche herangezogen.
  • Die Duplikatsanzeige wurde korrigiert, es sollten jetzt immer die korrekten Zeilen angezeigt werden
  • Das Ergebnis kann nach Files gefiltert werden, dabei werden nur jene Duplikate angezeigt die in dem ausgewählten File vorkommen. Wenn zusätzlich noch "strict" aktiviert ist werden alle Sources aus anderen Files ebenfalls ausgeblendet.
  • Optional kann nun das gesamte File im Edit angezeigt werden, das Duplikat wird dabei markiert.
  • Während der Duplikatssuche wird jetzt ein Dialog mit Progressbar angezeigt. Im Moment verwende ich noch Application.ProcessMessages damit das UI upgedatet wird was sich natürlich auf die Laufzeit auswirkt. In Zukunft wird das per Multithreading gelöst.

TODO:
  • Einstellungsmöglichkeiten - Kommentare beim Preprocessing entfernen, Compiler-Schalter als Kommentar behandeln, ...
  • Subduplikate mit "Eltern"-Duplikat verknüpfen
  • Eventuell noch bessere Anpassung während des preprocessing um unterschiedliche Formatierungen noch besser auszugleichen
  • ...

Gruß, Motzi
Angehängte Dateien
Dateityp: zip doublesource_102.zip (550,1 KB, 114x aufgerufen)
 
hoika

 
Delphi 10.4 Sydney
 
#31
  Alt 11. Mär 2008, 13:42
Hallo,

wie gross ist denn ein Objekt bei dir ?
Schon mal FastMM4 ausprobiert ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#32
  Alt 11. Mär 2008, 13:47
Zitat von Union:
Ich habe heute Nacht nochmal den Monstertest gefahren. Diesmal wurde er zwar fertig, hat aber mit 1,7 GB Hauptspeicherverbrauch meinen Virenscanner Service zum Absturz gebracht. Die "Fertig" Meldung mit Anzahl und Dauer kam noch, aber dann auch Out of Memory.
Code:
Dateien Zeilen   Duplikate Vergleiche    Dauer   Minuten Vergleiche/Sek.
5.260   4.952.663 N/A      20.142.551.061 3.084,94 51,42   6.529.316,96
Du solltest Dir mal anschauen, wie Du den Speicher anforderst. Teilweise merkt man das richtig, dass er in Intervallen realloziert und anhält.
Macht es überhaupt Sinn, soviele Dateien aufs Mal zu analysieren?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#33
  Alt 11. Mär 2008, 13:56
Zitat von hoika:
wie gross ist denn ein Objekt bei dir ?
Schon mal FastMM4 ausprobiert ?
Hab ich weiter ob irgendwo geschrieben, hat sich inzwischen aber ein bisschen reduziert. Ich verwende Delphi 2006, ich glaub seit Delphi 2005 hat Borland den eigenen MemoryManager durch den von Fast4MM ersetzt. Ich verwende ihn also bereits.
Zitat von toms:
Macht es überhaupt Sinn, soviele Dateien aufs Mal zu analysieren?
Das ist natürlich fraglich, aber es ist trotzdem ganz interessant zu wissen wie das Programm mit solch großen Datenmengen umgeht! Denn ausgehend davon kann man sich natürlich weitere Maßnahmen überlegen die sich auch bei kleineren Analysen positiv auswirken können.
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#34
  Alt 12. Mär 2008, 12:09
Ich hab gestern ein paar Tests mit Objekt-Pools gemacht -> bringt eigentlich nichts!

Konkret hab ich die NewInstance-Methode von TObject so überschrieben, dass der Speicherbereich für zB 10.000 Instanzen reserviert wird. Wenn nun ein Objekt erzeugt wird und noch Platz in diesem Block frei ist wird dem Objekt dieser Platz zugeordnet. Ist kein Platz mehr frei wird ein neuer Block/Pool angelegt. Dadurch wird die Anzahl der Speicherreservierungen drastisch reduziert.
Ich hab dann in einer Schleife 10.000.000 Instanzen erzeugt, einmal normale Objekte, einmal von meiner Pool-Klasse. Ergebnis: es ist eigentlich kein Unterschied messbar! Möglicherweise ist die Pool-Variante geringfügig schneller, aber wenn die Gesamtlaufzeit ~2 Sekunden dauert machen ein paar ms auch keinen Unterschied mehr.

Ich hatte gestern aber eine andere Idee mit der ich den Speicherverbrauch geringfügig senken und die Laufzeit um das bis zu 6-fache beschleunigen konnte.

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
hoika

 
Delphi 10.4 Sydney
 
#35
  Alt 12. Mär 2008, 12:35
Hallo,

jo ist fix
ein paar Anmerkungen / Bitten.

1. Folder ohne Unterverzeichnisse, also nur die Dateien
des ausgewählten Folders

2. Pfadangaben der Dateien
Vielleicht sollte man die in eine zusätzlich Status-Anzeige packen ?
Also den kompletten Pfad der gerade ausgewählten Datei anzeigen.

3. Klicke ich auf den RootNode (Length ...),
zeigt er rechts den (welchen ?) Quellcode in Grossbuchstaben an,
ist das gewollt ?

4. Schutzverletzung bei folgendem

- 1 Verzeichnis komplett analysieren
- Length anklicken -> das Compare (Toolbar ganz rechts ist aktiviert)
- 1 Verzeichnis analysieren, vorher abbrechen
- Toolbar-Button ist immer noch aktiv
Klicken -> Plautz

5. Compare
wenn es nur 2 Dateien sind, könnte man die in je
einen der ComboBoxen eintragen


Ansonsten nettes kleines Tool


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#36
  Alt 12. Mär 2008, 13:09
Zitat von toms:
Zitat von Union:
Ich habe heute Nacht nochmal den Monstertest gefahren. Diesmal wurde er zwar fertig, hat aber mit 1,7 GB Hauptspeicherverbrauch meinen Virenscanner Service zum Absturz gebracht. Die "Fertig" Meldung mit Anzahl und Dauer kam noch, aber dann auch Out of Memory.
Code:
Dateien Zeilen   Duplikate Vergleiche    Dauer   Minuten Vergleiche/Sek.
5.260   4.952.663 N/A      20.142.551.061 3.084,94 51,42   6.529.316,96
Du solltest Dir mal anschauen, wie Du den Speicher anforderst. Teilweise merkt man das richtig, dass er in Intervallen realloziert und anhält.
Macht es überhaupt Sinn, soviele Dateien aufs Mal zu analysieren?
Ja, duchaus, sonst würde ich es nicht machen. Ausserdem kann man ja auch mehrere Teilprojekte zusammen analysieren, um dann bestimmte Dinge in gemeinsame Module zu verlagern, was dann den Wartungsaufwand reduziert.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#37
  Alt 12. Mär 2008, 16:30
Zitat von hoika:
jo ist fix
ein paar Anmerkungen / Bitten.
Danke, aber die neue Version ist wie gesagt nochmal um einiges schneller..!

Zitat:
1. Folder ohne Unterverzeichnisse, also nur die Dateien des ausgewählten Folders
Ist vorgemerkt!

Zitat:
2. Pfadangaben der Dateien
Vielleicht sollte man die in eine zusätzlich Status-Anzeige packen ? Also den kompletten Pfad der gerade ausgewählten Datei anzeigen.
War ohnehin geplant, muss mir nur noch überlegen wie/wo, da komplette Pfade doch recht lang werden können.

Zitat:
3. Klicke ich auf den RootNode (Length ...), zeigt er rechts den (welchen ?) Quellcode in Grossbuchstaben an, ist das gewollt ?
Das ist gewollt. Das ist der preprocessed code - alle Vorkommen dieses Duplikats (die Kindknoten) haben denselben preprocessed code, auch wenn der Original code (den du siehst wenn du auf einen der Kindknoten klickst) ein bisschen anders ausschaut.

Zitat:
4. Schutzverletzung bei folgendem
- 1 Verzeichnis komplett analysieren
- Length anklicken -> das Compare (Toolbar ganz rechts ist aktiviert)
- 1 Verzeichnis analysieren, vorher abbrechen
- Toolbar-Button ist immer noch aktiv
Klicken -> Plautz
Danke, wird gefixt!

Zitat:
5. Compare
wenn es nur 2 Dateien sind, könnte man die in je einen der ComboBoxen eintragen
Jap, so was in der Richtung ist bereits geplant!

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#38
  Alt 15. Mär 2008, 18:18
Neue Version ist online - siehe erstes Posting.

Hardcore-Test-Ergebnisse folgen noch...

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 04:56 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