Die schiere Masse der Daten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Die schiere Masse der Daten

    Hallo zusammen,
    ich möchte ein Problem haben:

    Für einen Freund (DJ) schreibe ich ein Programm zur Verwaltung seiner ca. 90.000 MP3 Files.

    Struktur auf der Platte:
    Artist_Alben
    • Erster Buchstabe Artist
      • Artist
        • Album
          • Bei Bedarf
            • CD 1
            • CD n
              • Tracks
          • Oder
            • Tracks
    Mix-Alben
    • Erster Buchstabe Album
      • Album
        • Bei Bedarf
        • CD 1
        • CD n
          • Tracks
      • Oder
        • Tracks
    Soundtracks
    • Erster Buchstabe Album
      • Album
        • Bei Bedarf
        • CD 1
        • CD n
          • Tracks
      • Oder
        • Tracks

    Programm soll:
    Struktur der Tracks auf der Festplatte anzeigen (Explorer-TreeView) gelöst!

    Sortiert anzeigen nach:
    Artist
    Alben
    Genre

    Hierbei habe ich ein Problem:
    Tracks finden und die MP3-Tags auslesen habe ich, aber auf Grund der schieren Masse der Tracks dauert es eine Ewigkeit.

    Wer könnte mir einen Ansatz geben für eine schnellere Lösung!

    Danke im Voraus für die Hilfe.
    Wastl
    Wie sieht denn Dein Code bisher aus? Eine Suche in einem balancierten, geordneten Binärbaum hat normal logarithmisches Laufzeitverhalten.
    Allerdings kann das aufgrund der Struktur bei Dir natürlich stark abweichend sein, weil Du wohl pro Knoten mehr als 2 Nachfolger hast.
    Wäre daher interessant zu sehen, wie Du bisher suchst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hi
    vielleicht hältst du dir lieber eine Art Datensatz, in der du die Pfade mit den entsprechenden Alben, Artists, usw. kombinierst. Das lässt sich dann auch leichter verwalten, als wenn du jedes mal die Tags auslesen musst. Du kannst das ja zur Laufzeit up-to-date halten (FileSystemWatcher) und am Anfang kurz überprüfen, ggf. auch parallel zur Ausführung.
    Die Verarbeitung der Daten dauert bei 90000 Datensätzen nicht lange, da genügt sogar Quicksort zum Sortieren... (wird von List.Sort bzw. Array.Sort umgesetzt)

    Viele Grüße
    ~blaze~
    Hallo,
    Danke für die Antworten.

    Mache es jetzt so, das beim Start des Programms geschaut wird, ob es 3 XML Dateien gibt in denen Artist, Album und Genre sortierung abgelegt sind. Wenn Nein werden die 3 Datein erstellt, per BGW und die Auswahl-Button für Artist, Alben und Genre gesperrt werden. Sind die Dateien angelegt wird per FileSystemWatcher die Tracks überwacht. Habe gerade einen Probelauf gestartet:
    89.345 Files die Tracks gelesen und die drei Dateien geschrieben ca. 89 Sek.

    Eine Frage zu TreeView und XML:

    Die XML-Datei für Artist sieht so aus:

    Artisten
    • Artist
      • Name
        • Alben
          • Tracks
        • /Alben
        • Alben
          • Tracks
        • /Alben
    usw.

    Kann man daraus ein Treeview füllen ohne einen Reader schreiben zu müßen?

    Viele Grüße
    Wastl
    Du kannst dafür XDocument (oder XmlDocument) verwenden.
    Es kann übrigens auch lohnend sein, die Daten erst zu erstellen, wenn sie benötigt werden, d.h. das AfterExpand-Ereignis abonnieren und dort auswerten.
    Beachte, dass Dateien auch ersetzt werden können und sich die Daten dabei ändern. Es wäre sinnvoll, ab und an einen Durchlauf durchzuführen, der alle Änderungen, die vom FileSystemWatcher nicht erfasst werden können, zu überprüfen (z.B. bei jedem Start der Anwendung im Hintergrund in einem separaten Thread).
    Wenn du übrigens die XML-Datei optimierst oder am besten gleich binär abspeicherst oder eine beim Lesen effiziente Kompression verwendest, sollte der Vorgang auch nochmal schneller sein. Festplattenzugriffe sind in der Regel sehr langsam.

    Viele Grüße
    ~blaze~