Code-Performance verbessern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Code-Performance verbessern

    Hi Community!
    Ich möchte gerade einen Musikplayer programmieren und bin an der verbesserung der Importfunktion.
    Was cich aktuell tun möchte ist, dass das Programm den songnamen eigenständig erkennt und einer listbox als item hinzufügt.
    der speicherpfad des Songs wir in einem Array gespeichert.
    Um den songnamen auszulesen soll das Programm:
    -den textdurchgehen und die / zählen
    -den text erneut durchgehen und nach dem letzten / halten
    -alles nach dem letzten / in die variable wort reintun
    so habe ich mir das gedacht:

    VB.NET-Quellcode

    1. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK And ListTitle.Items.Count < 100 Then
    2. Songs(Many) = OpenFileDialog.FileName
    3. Dim chars As Integer = OpenFileDialog.FileName.Count
    4. Dim currentChar As Integer = 0
    5. Dim slashs As Integer = 0
    6. Dim wort As String = ""
    7. Do Until currentChar = chars
    8. If OpenFileDialog.FileName(currentChar) = "/" Then
    9. slashs = +1
    10. End If
    11. currentChar = +1
    12. Loop
    13.  
    14. currentChar = 0
    15.  
    16. Do Until currentChar = chars
    17. If OpenFileDialog.FileName(currentChar) = "/" Then
    18. slashs = -1
    19. End If
    20. If slashs = 0 Then
    21. currentChar = +1
    22. Do Until currentChar = chars
    23. wort = wort & OpenFileDialog.FileName(currentChar)
    24. Loop
    25. End If
    26. MsgBox(wort)
    27. Loop
    28. Many = +1
    29. Else
    30. MsgBox("This is not a Music file or you are trying" & vbCrLf & "to add more than 100 songs to your playlist." & vbCrLf & vbCrLf & "For more information have a look at the program help.")
    31. End If
    32. End Sub

    nur leider rauben die ganzen schleifen cpu un er schafft nichtmal die erste!
    Wie kann ich diesen code verbessern, bzw ist da irgendwo ein logikfehler drin?
    Ich habe keinen gefunden.


    MFG Ferb300


    PS: Wenn im falschen Unterforum, bitte verschieben :D
    umfassender HTML-Editor mit allem drum und dran: 40%

    Visual Basic-Quellcode

    1. MsgBox
    is noch altes VB6 in VB.NET wird

    VB.NET-Quellcode

    1. Messagebox.Show()
    verwendet.
    Wegen der Code Performance guck dir mal die String.Split() Funktion an: msdn.microsoft.com/de-de/libra…ring.split(v=vs.110).aspx
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    ... oder wenn der Songname bereist vorliegt:

    VB.NET-Quellcode

    1. Sub Test()
    2. Dim BeispielSongPath = "Z:\SharedMusic\Marsha Hunt - (1971) Woman Child\Walk On Gilded Splinters.mp3"
    3. Dim SongNameAnfang = BeispielSongPath.LastIndexOf("\"c) + 1
    4. Dim Songname = BeispielSongPath.Substring(SongNameAnfang)
    5. End Sub

    Schau' Dir mal im Objektbrowser an, was der String-Namespace so alles kann ...
    Auf die gleiche Art kannst Du dann den Dateinamen ohne Erweiterung extrahieren.

    Ferb300 schrieb:

    If OpenFileDialog.FileName(currentChar) = "/" Then
    What :?:
    Hole Dir den gewählten Dateinamen in eine IO.FileInfo-Instanz und such dort mit .NET-Mitteln.
    Wenn Du genau schreibst, was Du suchst, können wir Dir besser helfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Danke!
    Habs jetzt so gemacht und es funktioniert einwandfrei:

    VB.NET-Quellcode

    1. Private Sub AddButton_Click(sender As Object, e As EventArgs) Handles AddButton.Click
    2. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK And ListTitle.Items.Count < 100 Then
    3. Songs(Many) = OpenFileDialog.FileName
    4. ListTitle.Items.Add(Path.GetFileNameWithoutExtension(OpenFileDialog.FileName))
    5. Many = +1
    6. Else
    7. MessageBox.Show("This is not a Music file or you are trying" & vbCrLf & "to add more than 100 songs to your playlist." & vbCrLf & vbCrLf & "For more information have a look at the program help.")
    8. End If
    9. End Sub
    umfassender HTML-Editor mit allem drum und dran: 40%
    Vollzitat entfernt. ~Trade

    Was willst du eigentlich mit dieser Fehlermeldung bezwecken? Die klingt komplett so, als würdest du jemandem sagen: "Hey wayne" während sich dieser ein Eis kauft. Zusätzlich füllst du die MessageBox nur unzureichend auf. Was willst du ihm sagen... einen Hinweis, eine Fehlermeldung oder nur eine Warnung?

    Vielleicht hast du auch deine Liste (Array) nur mit 100 vorbelegt und nun sind dir Leute peinlich, die 12000 Songs auf der Platte haben? Ich würde für dich vorschlagen, dass du dich mit generischen Typen auseinandersetzt. Zudem wäre eine genaue MP3 Analyse, also die Metadaten der Dateien viel schlauer, als über die Dateinamen zu gehen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sio_x“ ()

    Ferb300 schrieb:

    VB.NET-Quellcode

    1. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK And ListTitle.Items.Count < 100 Then
    What?
    Du öffnest einen OFD und sagst dann Kuckuck :?:
    Den ListTitle.Items.Count musst Du abfragen, bevor der Dialog kommt, außerdem musst Du AndAlso verwenden:

    VB.NET-Quellcode

    1. If ListTitle.Items.Count < 100 AndAlso OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!