My.Computer.Audio.Play - Arbeitsspeicher auslastung

  • VB.NET
  • .NET (FX) 4.0

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

    My.Computer.Audio.Play - Arbeitsspeicher auslastung

    Hallo zusammen,

    Ich versuche gerade eine Wave Datei über einen Button abzuspielen. Dabei ist mir aufgefallen das mit jedem Button klick das Programm mehr und mehr Arbeitsspeicher verbraucht.
    Es sieht so aus das nach jedem abspielen, der Speicher nicht geleert wird?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. Dim Test As Stream = My.Resources.WaveFile
    6. My.Computer.Audio.Play(Test, AudioPlayMode.WaitToComplete)
    7. Test.Dispose()
    8. End Sub
    9. End Class


    Ich bin noch recht unerfahren in vb 2010. Muss ich noch irgend was machen, damit nach dem abspielen der Wave Datei diese wieder aus dem Arbeitsspeicher entfernt wird?
    Mfg Aod
    @Aod Statt Dim und Dispose() machst Du ein Using, allerdings löst das Dein Problem nicht.
    Probier mal, die Ressource direkt anzugeben:

    VB.NET-Quellcode

    1. My.Computer.Audio.Play(My.Resources.WaveFile, AudioPlayMode.WaitToComplete)
    Ansonsten sieh Dich nach nem anständigen Player um, Beispiele findest Du hier im Forum genug.
    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!
    @RodFromGermany danke für den Tipp mit Using. Das kannte ich noch nicht.
    Das mit dem direkten abspielen, hatte ich zuerst probiert. Dies hatte aber auch den effekt das der Arbeitsspeicher vollgeschrieben wird.

    Zwischenzeitlich bin ich hier rauf gestoßen. Damit scheint es zu klappen. Es sieht nun so aus:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. My.Computer.Audio.Play(My.Resources.WaveFile, AudioPlayMode.Background)
    6. GC.Collect()
    7. End Sub
    8. End Class


    Das GC.Collect scheint wohl das Problem zu lösen.

    Aod schrieb:

    Das GC.Collect scheint wohl das Problem zu lösen.
    Sollte nicht das Mittel Deiner Wahl sein, da der Player in einem anderen Thread arbeitet, wird das GC.Collect() aufgerufen, bevor die Datei abgespielt ist.
    Offensichtlich hat My.Computer.Audio() eine Macke.
    Such Dir einen anderen Player :!:
    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!