Große Datei durchsuchen - Optimierungsvorschläge gesucht

  • Hallo Professor Bernd

    Für die Verwendung in meinem CallTipViewer ist das Gegenteil gewollt: Nur eindeutige Suchbegriffe! Die Suchbegriffe sind ausschließlich vollständige Funktionsnamen, keine Teile.

    Was heißt das denn? Einfach eine statische Anzeige der Funktionsbeschreibung nach der Eingabe eines Funktionsnamens? Keine markierte aktuelle Postition in den Parametern? Was ist zuvor mit Übernahme von Vorschlägen für Funktionsnamen während der Eingabe?

    Geschwindigkeitsvergleich

    _ArrayFindAll
    Time: 0.0148594000
    _DynArray-UDF
    Time: 0.0005477000
    Dictionary
    Time: 0.0000195000

    Die Regex Variante von AspirinJunkie aus Beitrag 35, die ich für die angebrachte Methode halten würde fehlt auch. Ist doch super easy umzusetzen und die Dateigröße mit 4000 Zeilen ist eigentlich nicht so mega groß..

  • Geschwindigkeitsvergleich                                                                                               
    _ArrayFindAllTime: 0.0148594000
    _DynArray-UDFTime: 0.0046496000
    StringRegExpTime: 0.0044309000
    DictionaryTime: 0.0000195000


    Was ist denn mit den Zeiten passiert? In einer vorherigen Version hattest du noch als Wert für die DynArray-UDF-Variante eine Zeit von 0,5ms und jetzt auf einmal 4,6?

  • Hallo autoiter.


    Geschwindigkeitsvergleich

    Die Regex Variante von AspirinJunkie aus Beitrag 35, die ich für die angebrachte Methode halten würde fehlt auch.

    Danke für den Hinweis! :thumbup: Ich habe sie getestet und zum Geschwindigkeitsvergleich in Posting #40 hinzugefügt.


    Was heißt das denn? Einfach eine statische Anzeige der Funktionsbeschreibung nach der Eingabe eines Funktionsnamens? Keine markierte aktuelle Postition in den Parametern?

    In Posting #24 ist dazu ein Screenshot und in Posting #26 ist eine kurze Beschreibung. :)


    Was ist zuvor mit Übernahme von Vorschlägen für Funktionsnamen während der Eingabe?

    Meinst du "Auto Vervollständigung" / "Auto Completion" ? Das ist ein anderes Feature und PSPad hat das von Hause aus. :thumbup:


    Bernd.

  • Okay. Alles geklärt.


    Deinen Vergleich von _ArrayFindAll und Dict verstehe ich nicht. Dir geht es um einen eindeutigen Treffer? Warum Dann nicht ArraySearch? Bei der Dict-Variante suchst du auch nur nach einem Key..

  • Was ist denn mit den Zeiten passiert? In einer vorherigen Version hattest du noch als Wert für die DynArray-UDF-Variante eine Zeit von 0,5ms und jetzt auf einmal 4,6?

    Ups, da war etwas verrutscht! Ich habe es korrigiert und den vorherigen Wert wieder hergestellt. Gut dass du das gesehen hast! :thumbup:


    PS: Eine ganz wichtige OffTopic Frage: Scheinbar hast du meine komplette Tabelle in einem Rutsch in deine Beitrag kopiert. Wie macht man denn das? Ich suche schon lange nach einer Möglichkeit, Tabellen in meinen Beiträgen an andere Stellen zu verschieben, und muss da immer jede einzelne Zelle kopieren.


    Bernd.

  • PS: Eine ganz wichtige OffTopic Frage: Scheinbar hast du meine komplette Tabelle in einem Rutsch in deine Beitrag kopiert. Wie macht man denn das? Ich suche schon lange nach einer Möglichkeit, Tabellen in meinen Beiträgen an andere Stellen zu verschieben, und muss da immer jede einzelne Zelle kopieren.

    Ich hab nur den Zitieren-Button gedrückt ;)

    Ansonsten sollte das einfachste sein beim Schreiben auf die Quellcode-Ansicht zu gehen (Der Button ganz links) und sich den gewünschten Tabellenteil zu holen und woanders wieder einzufügen.


    P.S.: Hab die Funktion innerhalb der DynArray-UDF nochmal deutlich überarbeitet. Ist jetzt kompakter und sollte auch nen Tick schneller sein.

  • Deinen Vergleich von _ArrayFindAll und Dict verstehe ich nicht. Dir geht es um einen eindeutigen Treffer? Warum Dann nicht ArraySearch? Bei der Dict-Variante suchst du auch nur nach einem Key..

    In der au3.api gibt es zu verschiedenen AutoIt-Funktionen mehrere Variationen, z. B. zu "Opt(...)" gibt es 30 Variationen. In einem Array kann man für jede Variation ein Item hinzufügen, und jedes Item kann den gleichen "Namen" haben. Die Namen kann man mit _ArrayFindAll suchen (,oder mit _ArraySearch in einer eigenen Routine).


    In einem Dictionary kann man nicht mehrere Items mit dem gleichen Namen speichern. Deshalb habe ich im Dictionary als Workaround alle Variationen (zu jeweils einer Funktion) zusammen in einem einzelnen Item gespeichert, getrennt durch @CRLF. Nach einer Suche kann man die Variationen z. B. mit StringSplit wieder trennen.


    Bernd.

  • Okay, Aber dann muss dir doch klar sein, dass dein Vergleich ziemlich wertlos ist.


    Poste besser in Zukunft die Vergleichsdaten mit deiner Suche und nenne die Zeiten auf deinem lokalen System. Andere können dann das gleiche testen und Modifizierungen mit Zeiten auf ihrem System zeigen. Das wäre deutlich sinnvoller, als deine gezeigten Daten als Fakten zu nehmen.

  • Ich hab nur den Zitieren-Button gedrückt ;)

    Das funktioniert nicht beim umkopiern in meinen Beiträgen. :( Aber:

    Ansonsten sollte das einfachste sein beim Schreiben auf die Quellcode-Ansicht zu gehen (Der Button ganz links) und sich den gewünschten Tabellenteil zu holen und woanders wieder einzufügen.

    Das könnte funktionieren (noch nicht getestet, nur angesehen). Das funktioniert einwandfrei, gerade getestet. Mit dem Tipp bist du mein Held! :love: Ich freue mich gerade wie Bolle, damit eröffnen sich ungeahnte Möglichkeiten, in Galaxien, in denen noch nie ein Mensch zuvor ... :klatschen:


    Vielen Dank! :thumbup:

  • Okay, Aber dann muss dir doch klar sein, dass dein Vergleich ziemlich wertlos ist.

    Vergleiche sind oft ungenau, so wie Äpfel mit Birnen zu vergleichen. Das sollte man grundsätzlich nicht als in Stein gemeiselte Fakten sehen. 8o


    Andere können dann das gleiche testen und Modifizierungen mit Zeiten auf ihrem System zeigen.

    In den Quell-Codes von chesstiger, Musashi und mir sind die Zeitnahmen per TimerInit / TimerDiff gut zu erkennen. Ich habe mich um Transparenz bemüht und zu jedem Methodennamen in der Tabelle den zugehörigen Quellcode verlinkt. Wer eigene Tests damit durchführen will, braucht nur draufzuklicken. ;)


    Poste besser in Zukunft die Vergleichsdaten mit deiner Suche und nenne die Zeiten auf deinem lokalen System.

    Interessante Idee. Wie kann das denn genau aussehen?


    Bernd.

  • Vergleiche sind oft ungenau, so wie Äpfel mit Birnen zu vergleichen. Das sollte man grundsätzlich nicht als in Stein gemeiselte Fakten sehen.

    Naja, sorry. Aber wenn man die Vergleiche so baut, wie du, dann ist das natürlich erst recht so.


    Ich sage ja nicht, dass _ArraySearch Dict überflügelt. Aber bei Dict hast du einen Treffer aus 4000 (bzw. nach deiner Bearbeitung ja sogar weniger) und bearbeitest den weiter. Beim _Array durchsuchst du nach dem ersten Treffer alle weiteren Indizes durch. Wenn der Treffer bei Index 1 war ist doch klar, dass das Ergebnis viel länger auf sich warten lässt, als wenn du direkt den Treffer bearbeitet hättest..

    Du hättest wenigstens beides (Dict und Array) gleich aufbauen müssen..

    Interessante Idee. Wie kann das denn genau aussehen?

    Einfach die Datei um die es geht und die unterschiedlichen Suchen hochladen. Dann könnte man die einfach selbst ausführen und die Zeiten vergleichen und eigene Alternativen/Modifikationen testen. Vielleicht habe ich den entsprechenden Beitrag auch übersehen.

  • Du hättest wenigstens beides (Dict und Array) gleich aufbauen müssen..

    Das habe ich. Die Aufgabe, die verglichen wird, lautet: Suche ALLE Treffer zu einem Suchbegriff und gib sie aus. Die Aufgabe ist für alle Methoden gleich, die Zeitnahme beginnt vor der Aufgabe und endet danach. Wenn du einen Vorschlag hast, wie man das besser aufbauen könnte, würde mich das freuen.


    Edit: Die Messungen erfassen nur die Zeit, die die Suche benötigt, nichts anderes. Das Laden vorher, und das Anzeigen hinterher werden nicht erfasst.


    Einfach die Datei um die es geht und die unterschiedlichen Suchen hochladen. Dann könnte man die einfach selbst ausführen und die Zeiten vergleichen und eigene Alternativen/Modifikationen testen. Vielleicht habe ich den entsprechenden Beitrag auch übersehen.

    Wie gesagt, die Quell-Codes sind alle hier veröffentlicht und für die Bequemlichkeit habe ich sie in der Vergleichs-Tabelle verlinkt. An jedem geposteten Quell-Code gibt es einen Kopieren-Button, dann einfach im Editor auf deinem PC ein neues au3 erstellen, einfügen und starten. Das habe ich jetzt eher für Mitlesende geschrieben, du bist schon lange genug dabei und kennst das. 8o


    Falls ich deinen Vorschlag falsch verstanden habe, korrigier mich gerne. :)


    Bernd.