![]() |
DoubleSource - Duplikate im Source finden v0.4.1
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
erstmal vorweg - ich weiß, dass es so ein Programm vor kurzem schonmal hier gab ( ![]() Ich habe daher beschlossen mein eigenes Programm zu schreiben und versucht die von mir kritisierten Punkte zu verbessern. Features:
v0.4.1
v0.3.1
v0.2.2
v0.1.2
TODO:
Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.1
Moin Motzi,
hab DoubleSource und Dupecheck angeschaut. Zu den Verbesserungen hab ich in ![]() Anonsten auch hier: Sehr schönes einfaches Tool :thumb: |
Re: DoubleSource - Duplikate im Source finden v0.1
Hallo Motzi,
funktioniert schon ziemlich gut, trotz des frühen Stadiums. Folgendes ist mir aufgefallen:
|
Re: DoubleSource - Duplikate im Source finden v0.1
Wollst Du Dich nicht mit Union (DupeChecker) zusammentun und Eure Energie bündeln?
Warum soll jeder für sich seinen Kuchen backen, wenn man gemeinsam vielleicht besser zum Ziel kommt? Werft Eure Ideen in einnen Topf, beratet darüber und teilt Euch die Arbeit auf. |
Re: DoubleSource - Duplikate im Source finden v0.1
Moin, Moin Motzi.
Für den bisherigen Zeitaufwand schon recht passabel. Die Optik ist noch optimierbar; z.B. verschwindet der Splitter, wenn man ihn nach rechts bewegt. Zwei Controls wecken mein besonderes Interesse: Der "Spinbutton" (oder wie nennt sich das Teil) mit der diagonalen Teilung und die interessante Verbindung von TreeView und Grid. Wo finde ich diese Komponenten - die würde ich zu gern auch verwenden! |
Re: DoubleSource - Duplikate im Source finden v0.1
Zitat:
|
Re: DoubleSource - Duplikate im Source finden v0.1
Zitat:
Das geht zu Lasten der Entwicklungsgeschwindigkeit. |
Re: DoubleSource - Duplikate im Source finden v0.1
Das sind alles nachvollziehbare Argumente, aber es gibt sicherlich auch eine ganze Reihe von Delphi-Interessierten, die das alles nur so zum Spaß machen und die es reizt, selbstformulierte Ziel zu erreichen. Da ist es dann m. E. nicht schädlich, das Rad neu zu erfinden. Gerade in diesem Forum wird ja immer wieder (mit Recht) angemerkt, dass man durch einfaches Übernehmen von fremden Code schlecht oder auch gar nicht lernt.
Ich persönlich mache das nur so nebenbei und nur zum Spaß; und erfinde meine Räder auch immer wieder neu. Häufig kommen dabei unprofessionelle und schlechte Lösungen heraus - aber es sind dann Lösungen, die man selbst erfunden hat und die dann mit wachsenden Fähigkeiten optimiert werden können. |
Re: DoubleSource - Duplikate im Source finden v0.1
Erstmal danke für die vielen Kommentare! :)
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich hab das Programm vor allem deswegen geschrieben weil es mich einerseits interessiert hat sowas selbst zu machen und ich es andererseits auch gerade sehr gut brauchen kann. Wir können in Zukunft aber auch gern gemeinsam an einer Version arbeiten! :) Zitat:
Zitat:
![]() ![]() Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.1
Vorschlag zur optischen "Umsortierung":
FileEdit incl. Button in der Breite wie das geniale Grid, ebenso den Start-Button, das Anzeigefenster in voller Fensterhöhe darstellen |
Re: DoubleSource - Duplikate im Source finden v0.1
Zitat:
...:cat:... |
Re: DoubleSource - Duplikate im Source finden v0.1
hmmm, hab 'ne .DPR ausgewählt (mein aktuelles Projekt bestehteh fast nur aus der),
auf Start geklickt und Zitat:
|
Re: DoubleSource - Duplikate im Source finden v0.1
Bis jetzt ist das Programm nur zur Verwendung mit pas-Files gedacht, eine Exception sollte natürlich trotzdem nicht auftreten! Werd das fixen!
|
Re: DoubleSource - Duplikate im Source finden v0.1
Hallo,
zu Ordnern. Ich würde gern beides haben ;) Am anderen Programm hat mich gestört, das er nur Ordner unterstützt. Jetzt stürzt das Program aber in einer Datei ab. OK, nicht schön, aber naja. Wenn ich genau eine Datei prüfen will, muss ich einen Ordner anlegen und die Datei dort reinkopieren. Heiko |
Re: DoubleSource - Duplikate im Source finden v0.1
wie gesagt, das Projekt wo ich testen wollte besteht halt fast nur aus der DPR :?
Fehler(?): "Preprocessed code" enthält 2 Zeilen mehr, als "Original code". (je eine Zeile drüber und drunter) soll das so sein? vielleicht wäre s nicht shlcht auch mal die Zeilenübrüche zu ignorieren, bzw. diese der Syntax entsprechend neu zu setzen? ich schreib manchmal mehrere Befehle in eine Zeile. :oops: |
Re: DoubleSource - Duplikate im Source finden v0.1
Zitat:
Zitat:
Zitat:
Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.1.2
Neue Version ist online, diverse Bugs sind gefixt (falsche Zeilen im Duplikat, "List index out of bounds" Exception).
Details siehe erstes Posting. Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.1.2
Hallo Motzi
Funktionniert schonmal ordentlich. Solche Konstrukte bestehend aus begin, end, else etc. werden als Duplikate erkannt. Sollte ignoriert werden.
Delphi-Quellcode:
PS: Fenster startet nicht zentriert
END;
END ELSE BEGIN |
Re: DoubleSource - Duplikate im Source finden v0.1.2
Ist bereits in Planung! :) Dürfte vermutlich auch nicht allzu kompliziert werden, wird also wohl in den nächsten Tagen kommen...
|
Re: DoubleSource - Duplikate im Source finden v0.2.2
Neue Version ist fertig (siehe erstes Posting)!
Hab gerade einen Hardcore-Test gemacht: Files: 947 Original lines: 292.041 Preprocessed lines: 152.783 Comparisons: 665.512.367 Duplicates: 544 Duplicates sources: 1675 Time: 52.250ms Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.2.2
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Motzi
Einige Anmerkungen: 1. Kursive Zahlen werden z.T abgeschnitten (Siehe Bild) 2. Der Focus sollte im Progress Fenster auf dem Button sein. So kann das Fenster mit Enter resp. per Leertaste direkt geschlossen werden. Es stellt sich die Frage, ob ein Progress Fenster überhaupt nötig ist. Eine Progressbar würde es doch auch tun. 3. Verwendest du einen Splitter zwischen SynEdit und VST? Dieser funktioniert nicht richtig. 4. Mögliche Erweiterung: Bei Rechtsklick auf eine Unit im VST ein Kontextmenü anzeigen mit der Möglichkeit, die Unit (in Delphi, Editor) zu öffnen. Ansonsten :thumb: |
Re: DoubleSource - Duplikate im Source finden v0.2.2
Zitat:
die neue Version ist schick, auch der Optionendialog gefällt mir sehr. Allerdings habe ich einen "Extrem" Hardcore-Test gemacht, woraufhin ich den Rechner neu starten musste (per Hardware!). Der Hauptspeicherbedarf ging auf fast 400 MB und dann kam Out of Memory. Vorher kam eine Meldung "Creating datastructures" für mehrere Minuten, dann fing er an zu analysieren, aber nur bis ca. 10% des Progressbars. Dateien: 5.260 Zeilen: 4.956.663 |
Re: DoubleSource - Duplikate im Source finden v0.2.2
Wow.. ok, so einen Hardcore-Test hab ich noch nicht gemacht! Es wundert mich aber auch nicht wirklich, dass da dann irgendwann der Speicher ausgeht! Pro "preprocessed line" wird ein 48-Byte großes Objekt erzeugt, und außerdem noch eine sortierte Liste ohne Duplikate in die alle Zeilen eingefügt werden und über die verkettete Listen erstellt werden (die TPreprocessedLine Instanzen werden untereinander verknüpft).
Und pro gefundenes Duplikat werden dann noch mal 1-2 TDuplicateSource Instanzen erzeugt (ebenfalls 48 Bytes groß) und eventuell auch noch eine TDuplicate Instanz (24 Bytes groß). Noch nicht berücksichtigt sind dabei diverse Listen die die Instanz-Zeiger enthalten und natürlich auch nicht die Strings (sowohl Original code als auch preprocessed code)... Schafft es dein Programm diese Datenmengen zu bewältigen? |
Re: DoubleSource - Duplikate im Source finden v0.2.2
Zitat:
Zitat:
Zitat:
Zitat:
Code:
Wie berechnest Du eigentlich die Laufzeit? Ich habe den Eindruck, es ist nur die Analyse Zeit. Bei mir fängt die Zählung an, sobald der User "Start" gedrückt hat.
Files Zeilen Duplikate Vergleiche Dauer sek. Minuten Vergleiche/Sek.
5.260 4.956.663 39167 47.218.981.168 6803,02 113,38 6.940.885,25 |
Re: DoubleSource - Duplikate im Source finden v0.2.2
Zitat:
Zitat:
Zitat:
Zitat:
Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Eine neue Version mit einigen kleinen Änderungen ist online - siehe erstes Posting!
|
Re: DoubleSource - Duplikate im Source finden v0.3.1
Super, das ist ja jetzt 3 Mal so schnell wie vorher. Allerdings ist die Anzahl der Duplikate knapp 3 Mal so groß wie bei der vorherigen Version, bei den gleichen Testfiles.
Was mir noch fehlt ist eine Pfadanzeige der Dateien. Da Du ja standardmäßig alle Unterverzeichnisse durchsuchst, findet man die Dateien sonst schwer. Bei der Anzeige der Sourcen nebeneinander wird beim Öffnen des Fensters nichst angezeigt (Comboboxen sind nicht vorbelegt). Dort sollten dann vielleicht die ersten beiden Duplikate voreingestellt sein. Oder Du läßt in dem VST eine Mehrfachauswahl der Duplikate zu und zeigst dann die selektierten an. |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
Zitat:
Zitat:
Zitat:
Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.3.1
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:
Du solltest Dir mal anschauen, wie Du den Speicher anforderst. Teilweise merkt man das richtig, dass er in Intervallen realloziert und anhält.
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 Wegen des Threads hatte ich mir auch schon überlegt. Man kann ja auch Update statt Prozessmessages einsetzen. Und ob das so viel bringt, weil man ja ständig synchronize für die VCL-Zugriffe aufrufen muss? Aber ich hatte eine andere Idee, nämlich die Analyse selber in mehreren Threads parallel laufen zu lassen, die sich die Arbeit teilen (z.B. 5 Threads, jeder nimmt sich 25% der Dateien nach der Vorbereitung). |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
Zitat:
Mehrere Threads zu Erzeugen die sich die Arbeit teilen wäre natürlich eine Idee, fragt sich nur ob das wirklich viel bringt und den ganzen Aufwand rechtfertigt. Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Hallo,
wie gross ist denn ein Objekt bei dir ? Schon mal FastMM4 ausprobiert ? Heiko |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
|
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
Zitat:
|
Re: DoubleSource - Duplikate im Source finden v0.3.1
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 |
Re: DoubleSource - Duplikate im Source finden v0.3.1
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 |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
|
Re: DoubleSource - Duplikate im Source finden v0.3.1
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Gruß, Motzi |
Re: DoubleSource - Duplikate im Source finden v0.3.1
Neue Version ist online - siehe erstes Posting.
Hardcore-Test-Ergebnisse folgen noch... Gruß, Motzi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz