Problem mit sehr großen Ressourcen dateien

  • VB.NET
  • .NET (FX) 4.0

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

    Problem mit sehr großen Ressourcen dateien

    Hallo,
    ich brächte Hilfe mit meinem Projekt. Da das Projekt, an dem ich arbeite auch auf anderen Computern verwendbar sein soll und ich nicht herausgefunden habe wie es anders geht, habe ich alle audio dateien in den Ressourcen gespeichert und lasse sie mit der my.computer.audio methode abspielen. Die Resourcen dateien sind zusammen jetzt ungefähr ~600 mb gross. Wenn ich versuche zu debuggen bekomm ich die fehlermeldung: "System.Outofmemoryexeption" mit einem weiteren fehler:

    Fehler 1 Ressourcendatei "..." konnte nicht eingebettet werden: Für diesen Vorgang ist nicht genügend Speicher verfügbar.

    Ich brauche da ganz dringend Hilfe, da ich mich damit nicht auskenne, ich bin noch in der Lernphase und brauche das für die Schule...
    Kann ich dem Programm irgendwie mehr Speicher zuweisen, oder das anders lösen, denn Ressourcen dateien können als audio ja nur mit .wav ausgeführt werden, geht es irgendwie auch mit .mp3, ich bin gerade echt verzweifelt.
    Also so ein ähnliches Problem hatte ich auch gehabt, die Daten werden hierbei nähmlich in die RAM geschoben, da es aber(ich vermute es) für die .Net Programme nur eine Mindestgröße erlaubt ist die die Daten in die RAM schiebt, bei mir funktionieren 100mb, versuch dies auch mal bei dir und taste dich mal heran.

    EDIT:
    Zur Not musst du die Resourcen in 100mb aufteilen, aber wozu muss das in den Resource Ordner? Kannst du das nicht einfach in einen Lokal angelegten Ordner aus starten?
    Man kann kaum verschwenderischer mit RAM umgehen als so. Du lädst damit die gesamte Audiodatei in den Speicher. Wenn das jedes Programm machen würde dann hättest du einen RAM Verbrauch von einem ganzen Rechenzentrum.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Zh4dar schrieb:

    es etwas ausführlicher zu erleutern?
    im grunde hat er es doch gesagt, zumindest das wichtigste:
    nicht die Audio-Dateien in die Resourcen packen. Da kann man nicht mehr viel erläutern - es halt nicht tun.
    Sondern Audio-Dateien Dateien sein lassen - was sie ja sind.

    Wie du eine Audio-Datei abspielst ist dir bekannt?
    Das heisst jetzt zum Beispiel, wenn das Program auf ein Cd exportiert wird, dann schaut er in dem Ordner auf der Cd nach "MeineAudio.wav" ? Und spielt diese dann ab?

    ErfinderDesRades schrieb:

    Zh4dar schrieb:

    es etwas ausführlicher zu erleutern?

    Wie du eine Audio-Datei abspielst ist dir bekannt?

    Bisher nur in der art, wie ich es schon beschrieben habe :/
    My.Computer.Audio.Play(My.Resources.meineaudio, AudioPlayMode.Background)


    Zh4dar schrieb:

    das Program
    ist als x86, x64, AnyCPU compiliert?
    Probiere x64.
    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!
    media.tumblr.com/06ec538df123c…ine_mi2qjbq7FS1qz4rgp.gif

    Wieso sollte er es auf x64 versuchen. a) funktionierts dann auf x86 nicht mehr und b) ist es einfach falsches Design das Zeug in Ressourcen zu packen.
    Jedes Programm legt das in den Programmordner oder Unterordner. Und dann wird halt alles an den Benutzer übergeben. Wenn du nen Spiel mit 20 GB Größe hernimmst, dann lädt der auch nicht 20GB in den RAM. Das liegt in einer extra Datei und da wird halt das rausgeholt was grad gebraucht wird und der Speicher anschließend wieder freigegeben. Alles andere ist schlicht weg fatal.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    RodFromGermany schrieb:

    ist als x86, x64, AnyCPU compiliert?
    Probiere x64.


    Wie finde ich das heraus, was macht es, wie mache ich es? Von dem wa sich beim googlen gefunden habe, ich benutze Visual Basic 2010 Express

    thefiloe schrieb:

    Wieso sollte er es auf x64 versuchen. a) funktionierts dann auf x86 nicht mehr und b) ist es einfach falsches Design das Zeug in Ressourcen zu packen.
    Jedes Programm legt das in den Programmordner oder Unterordner. Und dann wird halt alles an den Benutzer übergeben. Wenn du nen Spiel mit 20 GB Größe hernimmst, dann lädt der auch nicht 20GB in den RAM. Das liegt in einer extra Datei und da wird halt das rausgeholt was grad gebraucht wird und der Speicher anschließend wieder freigegeben. Alles andere ist schlicht weg fatal.


    WIe lege ich diesen Unterordner fest weil mit dem was Isaalalmani geschrieben hat,
    My.Computer.Audio.Play(My.Application.Info.DirectoryPath & "\MeineAudio.wav", AudioPlayMode.Background)
    bekomme ich es gerade nicht, er findet die audiodatie nicht. Und das mein weg der falsche weg war ist mit mittlerweile bewusst, mir fehlen nur die Kenntnisse des eigentlichen Codes um das dann auch umzusetzen. Wenn mit jemand etwas mehr Beispiel code gibt bin ich sicher in der Lage, das auf mein Projekt umzuschreiben.
    Gar nicht, ist nicht sinnvoll.
    Du sollst das so mitliefern und dann kannst Du entsprechend über Streams arbeiten. Es geht um Audio, oder? Ich denke, dass zudem jede gescheite Library eine Überladung der Methode für das Einlesen anbietet, die einen Stream annimmt, dann kannst Du problemlos sehr große Dateien einlesen und bist nicht beschränkt.

    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 :!:
    Rechtsklick auf dein Projekt im Projektmappenordner.
    Dann auf Eigenschaften klicken.
    Dann öffnet sich ein Fenster dort kannst du dann links "Kompilieren" auswählen
    Dann kannst unter "Ziel-CPU:" deine Einstellung prüfen

    Bei dir müsste AnyCPU ausgewählt sein
    "Das Internet ist nur ein Hype" - Bill Gates
    Wie gesagt ich bin Anfänger, und brauche das für die Schule, es soll eigentlich nur ein sehr einfaches Programm sein das Audio mit Buttons abspielt, es ist aber eine große Menge and Audio, was gerade mein Problem ist. Zum Beispiel kann ich mit dem Begriff Stream nichts anfangen.
    @Xy8000

    thefiloe schrieb:



    Zum Thema:
    My.Computer.Audio.Play kannst Du vergessen.
    1. Ist der My-Namespace zu 95% Unsinn und unsauber.
    2. Gibt es für sowas gescheite Libraries (z. B. CSCore) und auch denke ich, dass Du hiermit keine Streams einlesen kannst.
    Außerdem wäre Path.Combine so 'ne Sache.

    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 :!:

    Zh4dar schrieb:

    es soll eigentlich nur ein sehr einfaches Programm sein das Audio mit Buttons abspielt
    Lege die Audios als einzelne Dateien in einen Unterordner neben die Exe.
    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!