Announcement

Collapse
No announcement yet.

Applikation zu gross für c#Compiler

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Applikation zu gross für c#Compiler

    VS2008 SP1, 4GBRAM, Vista Ultimate 32bit ,100GB HDD free

    Habe eine Applikation mit vielen Forms /Datasets/Reports.
    Ständig kommt eine Fehlermeldung beim kompilieren, weil die 2GB Grenze
    von Visual Studio erreicht wird.
    Not enough storage

    Wie kann ich diese vorhandene Applikation am besten aufteilen in
    mehrere kleine Solutions und dann mit USING die kleinen
    neuen Solutions in die grosse Applikation einbinden ?.
    Wie geht das am besten ?

    Vielen Dank.

  • #2
    Hallo,

    das using ist in diesem Zusammenhang ziemlich unwichtig; das hast du vermutlich auch bisher schon gemacht. Du meinst vermutlich das Einbinden der DLLs (Assemblies) als Referenz/Verweis; aber das geht in der Tat problemlos.

    Für die Aufteilung schlage ich vor, etwa so zu trennen:
    * Datenbank-Anbindung, bei mehreren DBs jede für sich
    * interne Datenmengen (typ. DataSets), ebenso getrennt
    * Geschäftslogik
    * Programmstart, Login-Formular, SplashScreen (die einzige Assembly als Exe)
    * Hauptformular
    * alle Formulare, die zur normalen Eingabe oder laufenden Arbeit gehören
    * alle Formulare, die zur Konfiguration gehören

    Gruß Jürgen

    Comment


    • #3
      Vielen Dank für den Hinweis.
      Leider weiss ich nicht wie man das trennen durchführt.
      Habe also z.B. 50 Formulare in der Anwendung und möchte
      gerne z.B. 1 Formular exemplarisch auslagern.
      Welche Schritte muss ich hierfür manuell ausführen ?.
      Bitte möglichst genaue Anleitung.

      Vielen Dank.

      Comment


      • #4
        Das musst du schon selbst ausprobieren.

        Variante 1 wäre, aus der csproj-Datei per Texteditor mehrere csproj-Dateien zu erstellen und die jeweils nicht passenden Zeilen zu löschen (bzw. die passenden rüberzuschieben.)

        Variante 2 benutzt die IDE: Erzeuge alle einzelnen Projekte in derselben Projektmappe; in diese Projektmappe gehört auch das "alte" Projekt. Dann klickst du im Projekt-Explorer jedes Element (Formular, andere Klassen) an und verschiebst es in das gewünschte Projekt. (Unter Umständen werden die zugeordneten Designer.cs-Dateien nicht verschoben; deshalb wies ich auf "Ausprobieren" hin.)

        In beiden Fällen sollten die Namespaces geändert werden; dann müssen natürlich die using-Direktiven angepasst werden.

        Gruß Jürgen

        Comment


        • #5
          Habe die Anwenung nun aufgeteilt im Projektmappenexplorer
          und habe daraus 2 Projekte bzw. Anwendungen gemacht.

          Dieses Projekt2 hat als Type WindowsApplication. Ist das richtig ?.

          Nun habe ich einige Forms auf Projekt 2 verschoben und die
          dazu nötigen Datasets (xsd) ebenfalls.
          Anschliessend habe ich noch den Namespace auf das 2.Projekt
          angepasst.
          Soweit keine Fehlermeldungen.

          Jetzt füge ich eine ADD Reference auf Projekt 2 hinzu.

          Kompiliere ich nun neu, erfolgt abermals eine Fehlermeldung.
          Diese lautet nun System.OutofMemory Exception.

          Der Compiler Devenv.exe lädt jedesmal die kompletten Projekte
          in den Speicher, so dass eine Aufteilung in mehrere kleine Projekte
          in dem Projektmappenexplorer bei mir offensichtlich nichts bringt.
          Das komplette Projekt scheint zu gross zu sein.

          Ist es vielleicht besser viele kleine Applikationen / Assemblies .exe
          (wegen Forms oder kann man DLLs erstellen? (wie geht das bei einer
          Form ?) zu erstellen und diese über ADD Reference einzubinden ?.

          So wie vorgeschlagen (IDE) funktioniert es bei mir nicht.
          Wie geht man weiter vor ?.

          Vielen Dank.

          Comment


          • #6
            Devenv.EXE zeigt im Taskmanager 1.100 MB Ladegrösse.

            Comment


            • #7
              ob exe oder dll ist bei .NET egal da beides Assemblies sind die der JIT gleich behandelt.

              Zum eigentlichen Problem kann ich dir leider nicht so wirklich helfen
              Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

              Comment


              • #8
                Generell sollten 50 Formulare kein Problem für VS.NET darstellen. Ich vermute entweder irgendeinen Treiber-Problem oder du läst irgendwelche "Komische" Sachen. Ich weiß jetzt nicht ob man mit VS.NET 2008 auch mit aktiven Datasets in der IDE arbeiten kann. Aber falls das ist: Lädst du evtl. irgendwelche Tabellen mit mehreren 100.000 Datensätzen in der IDE?

                Comment


                • #9
                  Projektgrösse:

                  130 Formulare .cs
                  50 Reports .rdlc
                  100 DataSets .xsd

                  1 externe DLL
                  EpsonStatusAPI

                  Tabellen mit mehreren 100.000 Datensätze werden
                  nicht geladen.

                  Es erfolgt ständig beim Kompilieren die Fehlermeldung das die EXE
                  zu gross ist oder das Manifest, manchmal auch SystemOutOfMemory
                  Exception.

                  Unexpected error writing metadata to file 'Projekt.exe' -- Not
                  enough storage is available to complete this operation.

                  Welche Obergrenzen gibt es ?. Wo steht etwas darüber ?
                  Wieviel Speicher verbraucht ein normaler Report (rdlc) ?.
                  Was bedeutet im Projektmappenexplorer die Endung Projekt.idc ?

                  Vielen Dank.

                  Comment


                  • #10
                    Hallo,

                    diese Fehlermeldung dient der Verwirrung. Bitte prüfe, ob die Ausgabedatei Project.exe durch irgendeine andere Maßnahme noch vom Betriebssystem blockiert ist oder ob du im Ausgabeverzeichnis überhaupt genügend Schreibrechte hast. Vielleicht liegt das Ausgabeverzeichnis "versehentlich" auf einer Partition, die keinen Platz mehr hat oder dergleichen.

                    100 typisierte DataSets sind in der Tat riesig; alles andere ist eher nicht der Rede wert. Ich kann mir aber dennoch nicht vorstellen, dass das zu Problemen führt; aber wegen der Übersichtlichkeit des ganzen Projekts solltest du das auf jeden Fall in viele Assemblies aufteilen.

                    Jürgen

                    Comment


                    • #11
                      Habe volle Schreibrechte und genügend Speicher auf der Festplatte
                      als auch im RAM.

                      Gibt es eine Limitierung des EXE Assembly bezüglich der Grösse ?.

                      Wie wird das 2.Projekt im RAM-Speicher behandelt
                      bei einer Kompilierung ? (nimmt dies Speicher weg?).

                      Lässt sich mein Speicherproblem lösen durch Aufteilung
                      in mehrere Assemblys ?
                      Was ist mit den DataSets ?
                      Habe im Hauptprojekt unter Settings den ConnectionString gespeichert.
                      Jetzt muss ich auch noch im 2.Projekt einen Eintrag machen.
                      Wie lässt sich das umgehen bzw. der Connectionstring von Projekt1
                      im Projekt 2 aufrufen / anwenden ?.


                      Gibt es eine Limitierung der DataSets ?.
                      Wieviele Tabellen darf ein DataSet maximal haben ?.
                      Wo findet man Limits bezüglich Visual Studio (ist ja 32bit Verson).


                      Vielen Dank.

                      Comment


                      • #12
                        Hallo,

                        zu den vielen Fragen mit "Maximum von..." kann ich eigentlich nichts sagen. Ich gehe aber davon aus, dass es in der Regel so gut wie immer sozusagen "unbegrenzt" ist: Da als Index von Collections immer integer genommen wird, dürften entsprechend viele Einträge möglich sein - also referenzierte Assemblies, DataTables in DataSet usw.

                        Relevant sollte also in erster Linie die Praktikabilität und Übersichtlichkeit für den Entwickler und Administrator/Anwender sein. Wie gesagt: siehe meine erste Antwort.

                        Als EXE, d.h. Windows-Application, sollte genau eine Assembly kompiliert werden, nämlich diejenige mit der statischen Main-Methode (und diese befindet sich üblicherweise in der program.cs und der class Program. Allenfalls gibt es zwei EXEs, eine für den Server und eine für den Client. Alle anderen Assemblies werden als DLL, d.h. Klassenbibliotheken, kompiliert.

                        Der ConnectionString sollte nicht in den Quellcode eingebaut werden; dazu ist die app.config vorgesehen (wenn das Passwort fest dazu gehört, dann natürlich verschlüsselt). Es gibt mehrere Möglichkeiten, dass verschiedene Anwendungen auf die gleiche app.config zugreifen, beispielsweise: In der app.config steht nur ein Verweis auf eine gemeinsame "externe" config-Datei; die EXEs stehen im selben Verzeichnis, und die app.config der einen verweist auf die app.config der anderen; über "<probing privatePath="paths"/>" wird auf Unterverzeichnisse verwiesen.

                        Ich habe mal Google "Visual Studio Limits" benutzt und viele Hinweise gefunden. Vielleicht willst du selbst mal dort lesen.

                        Für dein Ausgangsproblem schlage ich vor, manuell eine neue Projektmappe zu erstellen und manuell die vorhandenen Klassen auf die Projekte zu verteilen. Dann solltest du eher merken, an welcher Stelle es hakt; es könnte aber auch sein, dass durch diesen "Neuaufbau" der sln-Datei die Probleme sich von selbst auflösen.

                        Jürgen

                        Comment


                        • #13
                          projekt1.csproj weg

                          Nun ist es soweit, Projekt1.csproj wurde
                          gelöscht oder ist nicht mehr vorhanden und
                          muss neu aufgebaut werden.

                          One or more projects in the solution has been moved,renamed
                          or is not on your computer

                          Wie geht das ?

                          Vielen Dank.

                          Comment


                          • #14
                            Das Aufteilen eines grossen Projektes in mehrere kleine
                            Projekte hilft dem Speicherhunger von Visual Studio 2008 SP1
                            bei mir nicht auf die Sprünge.
                            Egal wie ich es drehe und wende, VS2008SP1 lädt beim
                            Start der Solution alle Projekte in den Arbeitsspeicher.
                            Man kann dies schön beim Verbrauch im Taskmanager sehen.
                            Somit ist viel wertvoller RAM-Speicher von VS2008 SP1 bereits
                            im Vorfeld verbraucht und lässt sich zumindest bei mir nicht
                            mehr freigeben.
                            Dies führt dann aufgrund der Projektgrösse zum
                            Build Error
                            Problem generating manifest. Insufficent memory to continue
                            the execution of the program.
                            Wohlgemerkt kompiliert er noch, aber beim abschliessenden
                            Applicaion Build gibts ein Error.
                            Zudem erfolgt auch ständig SystemOutOf Memory Exception.

                            Letztendlich habe ich dann
                            Sharpdevelop 3 installiert und dort das Projekt geladen.
                            Eine wesentlich geringere Ladegrösse im Arbeitsspeicher und
                            ein erfolgreiches Build waren das Ergebnis.

                            VS2008 SP1 hat wohl noch viel vom OpenSource Projekt zu lernen.
                            Diese ziehen sich die Formulare und DataSets wenigstens nicht
                            in den Arbeitsspeicher und funktionieren beim Build korrekt.
                            Hoffentlich gibts bald ein neues Servicepack, so machts auf jedenfall
                            mit VS2008 SP1 kein Spass.

                            Comment

                            Working...
                            X