Große Ressource in Programm embedden

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

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Hutzi.

    Große Ressource in Programm embedden

    Hallo Zusammen,

    ich schreibe eine vb.net Anwendung mit Framework 4.5.
    Ich versuche eine 1,6GB große zip Datei an meinem Programm anzuhängen (embedded). Das funktioniert auch - auch das entpacken der Datei klappt soweit.
    Wenn ich jedoch mein Visual Studio schließe und neu aufmache, erhalte ich beim öffnen des Designers eine outofmemoryexception.

    Ich weiß leider nicht, wie ich damit umgehen soll. Das System selbst hat 8GB RAM (mehr als genug) und Visual Studio nutzt zu dem Zeitpunkt der exception kaum mehr als 400MB.

    Kann mir jemand helfen, wie ich generell mit solch großen Dateien innerhalb meiner Anwendung umgehen kann?

    Danke

    €dit: Spätestens beim hinzufügen meiner zweiten Datei (nochmal 800MB) geht nichts mehr. Was für Möglichkeiten habe ich? Die Lösung MUSS sein, dass es am Ende nur eine einzige Datei (.exe) gibt.

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

    @Hutzi Wahrscheinlich ist es das beste, wenn Du diese Dateien neben die Exe oder in einen Unterordner neben die Exe legst.
    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!
    Also ich habe gerade 2 Dateien mit 4,7 Gigabyte in die Ressourcen gepackt und kann die Form immer noch problemlos im Designer bearbeiten. Wie fügst du die Datei dem Projekt hinzu?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bluespide“ ()

    @Hutzi Möglicherweise musst Du das Projekt explizit auf x64 umstellen.
    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!
    Moin. Sorry für die späte Rückmeldung. Das Projekt auf x64 umzustellen ändert leider nichts.

    @Bluespide: Hast Du danach auch VS einmal komplett geschlossen?
    Ich binde die Dateien ohne Probleme in das Projekt ein. Alles klappt problemlos. Compilieren geht auch. Das Programm macht seinen Job.
    Wenn ich danach VS neu starte, kann ich die Designer-Ansicht nicht mehr aufrufen. Warum, kein Plan. Compilieren geht und auch sonst geht alles. Nur der Forms-Designer meldet outofmemory wenn ich ihn aufrufen möchte.

    Wenn ich jedoch mehr als 2GB zu dem Projekt hinzufüge klappt auch das Compilieren nicht mehr.
    Ich nutze die 2017er Community Edition.

    Hab gerade nochmal insgesamt 2,5GB in das Projekt geladen und Kompiliert. Ergebnis vom compiler:

    Quellcode

    1. Fehler
    2. BC31509
    3. Die Ressourcendatei "programm.Resources.resources" kann nicht geöffnet werden: Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.


    Die Hauptform kann ich ohne Probleme im Designer öffnen. Wenn ich jetzt das Programm speichere, Visual Studio komplett schließe, Visual Studio neu start und das Projekt lade, erhalte ich beim öffnen der selben Form die outofmemory exception.
    Ich bin davon überzeugt, dass VS es schlicht nicht supported.

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

    @Hutzi Beende mal das Studio. Lösch das obj- und das bin-Verzeichnis und beginne mit Rebuild All.
    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!
    Hallo

    Ich würde trotzdem gerne mal die Frage in den Raum werfen warum es denn zwingend erforderlich ist solch große File mit hinein zu packen.
    Nicht falsch verstehen, kann ja sein da du einen triftigen Grund hast aber dennoch - vieleicht verrläufst du dich ja in was und der von dir angedachte Grund geht anders vieleicht noch besser zu lösen.

    Grüße
    sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Rod Danke, hilft bei mir aber auch nicht - wenn die resourcen Datei über 2GB groß ist compiliert er nicht mehr. Für die 1,6GB Datei könnte man das mal ausprobieren, also ob dann der Designer noch läd.
    @Nofear23m: Der Grund ist ich muss in einer Umgebung in der es kein Internet gibt diese große Datenmenge für den Server bereitstellen. Da diese Bereitstellung so einfach wie möglich sein soll und auch viele Usereingaben erfordert habe ich dafür mein eigenes Programm geschrieben, das möglichst aus nur einer Datei bestehen soll.

    Ich habs jetzt so gelöst, dass ich die Files als zip mit dazugebe und diese Zip-Datei sich einfach im gleichen Ordner die wie exe befinden muss. Ist nicht optimal, aber funktioniert tadellos.

    Hutzi schrieb:

    in der es kein Internet gibt diese große Datenmenge für den Server bereitstellen

    Aber gerade da macht es ja sogar KEINEN sinn. Wozu auf jeden Rechner so große Dateien kopieren wenn diese am Server (aufs Netzwerk gibts ja zugriff) abgelegt werden können.
    Ich müll ja nicht absichtlich jeden client mit mehreren GB zu wenn ich die Dateien auf einem Netzwerkpfad zur verfügung stellen kann. Und für dich wären die Dateien auch besser austauschbar.
    Wäre das nicht viel besser. das mit dem Zip ist ja genauso schlecht gelöst.

    Ich denke du machst dir hier das leben komplizierter als nötig.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Sascha, Du verstehst mich nicht. Clients sind irrelevant. Ich lege die Dateien auf dem Server ab, der Server benötigt diese um seinen Job zu machen. Nix Client :)
    s ist schon alles richtig so, trotzdem danke für Deine Bemühungen.

    Es ist im Prinzip wie eine Installation und Konfiguration auf dem Server. Vielleicht kannst Du es Dir so besser vorstellen. Ich verteile die Daten danach nicht, diese werden ausschließlich vom Server benutzt.

    Hutzi schrieb:

    Nix Client
    Derjenige, der die Daten auf den Server schiebt, ist der Client.
    Egal, ob Mensch oder Programm. ;)
    Deswegen heißt es ja auch Client-Server-Verbindung.
    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!
    Und das hilft mir jetzt wie? Wenn der Client in diesem Falle also ein Mensch - wie erspart mir das, die Dateien in mein Programm einzubinden?
    Ich sehe, dass führt hier zu nichts mehr. Trotzdem vielen Dank an alle sinnvollen Kommentatoren für eure Unterstützung.