Hallo,
als ausführbare Datei sind die .NET Pogramme ja nur seht klein. Aber ausgeführt sind die ja riesig... Mein Programm besteht aus aus nem MFC .ocx und nen paar dlls und ist mal eben so 26 mb im speicher. Mir ist auch aufgefallen, das wenn ich mir z.B. eine Kernel Funktion via DllImport einbinde, dann wächst das Programm beim einbinden der DLL um ca 6 MB.
Naja das ist ja auch irgentwie verständlich das .NET programm größer sind, wahrscheinlich werden da wohl alle .NET dlls eingebunden. Aber 26 MB ist schon derbe.
Selbst eine noch jungfreuliche anwendung ist mal eben so 11mb groß,
Weiß jemand warum die Programme sich im Speicher so ausdehnen?
Oder mache ich vieleicht irgentetwas falsch?
Gruß Stu
und wo ist konkret das Problem wenn da xxMB gebraucht werden? Nur weil das dransteht heißt ja noch lange nicht, dass das fest verplant ist sondern eben von .Net mal reserviert wurde.
vgl. anderer OS' bzw Vista auch(?) da is der Ram immer voll um beispielsweise programmstarts zu beschleunigen, wieso auch nicht, was bringen z.b. 1 gb freier ram wenn man den sinnvoll einsetzen kann.
Was ich aber sagen will, solang es kein konkretes problem bzw eine outofmemory exception gibt ist das nicht unbedingt sinnvoll darüber nachzudenken.
Die Forensuche gibt btw auch einiges zu dem thema her
moin
ich frage mich gerade was die Größe eines ausführbare Programms mit der Größe des Programms im Speicher zu tun hat
für jedes einzele Objekt muß Speicher reserviert werden
mfg
Aktuelle Rechner werden mit einem Gigabyte Speicher ausgeliefert. 11 MB sind grad mal 1% davon. "Riesig" ist immer relativ....
Den Speicher den du im Taskmanager bei .Net Anwendungen siehst, ist der Speicher der vom Pogramm bem System angefordert wurde, dass Programm nutzt aber nie den kompletten angefordert Speicher zu 100%. .NEt Programme reservieren ähnlich wie Windows (VISTA) Speicher im voraus, weil Speicheranforderungen recht langsam sind.
Bei DLLImporte ist es so, dass native Objekte und Werttypen in C-Datentypen gewandelt werden müssen. C kennt zum Beispiel keine Strings. Und das kostet halt Speicher.
Für den Reservierten Speicher gibt es DLLImport-Methode um den reservierten Speicher zu definieren, bzw. zu minimieren. Leider weiß ich den Namen der Funktion nicht. Und die Funktion ist auch mit vorsicht zu genießen. Besonders wenn du mit mehreren Threads arbeitest
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Frage: Spart ungenutzter Speicher Strom oder bringt anderweitige Vorteile? 😉
Stätestens Vista wird mit diesem "Speicher-Geiz" endgültig aufräumen. Das krallt sich alles was da ist....
Nur ungenutzter Speicher ist schlechter Speicher. Wie immer gilt nämlich: Weniger genutzer Speicher = Schlechtere Performance.
Original von svenson
Frage: Spart ungenutzter Speicher Strom oder bringt anderweitige Vorteile? 😉
Durchaus, wenn auch indirekt. Mal ein Beispiel:
Ich habe 2GB Ram eingebaut, nutze kontinuierlich maximal 1gb somit könnte ich 1gb herausnehmen wodurch mein PC weniger Strom verbraucht 😁
Jedes Bit eines Rams ist ein Transistor. Und Transistoren erzeugen genau wie alle andren Komponenten im PC wärme, wenn der Zustand des Bits (Transistor) von 0 auf 1 oder umgekehrt wechselt. Und diese Wärme sollte irgendwie abtransportiert werden. Entweder passiv oder aktiv. Bei aktiv brauchst du wieder mehr Strom (Lüfter).
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Dann messe schön mal die Stromaufnahme deines Rechners mit mehr oder weniger Speicherbelastung....
Original von daniel
Original von svenson
Frage: Spart ungenutzter Speicher Strom oder bringt anderweitige Vorteile? 😉Durchaus, wenn auch indirekt. Mal ein Beispiel:
Ich habe 2GB Ram eingebaut, nutze kontinuierlich maximal 1gb somit könnte ich 1gb herausnehmen wodurch mein PC weniger Strom verbraucht 😄
Du könntest auch den Rechner nach dem Speicherausbau gleich ausgeschaltet lassen. 😉
also irgendwie passt das nicht mehr so ganz zum thema...
für mich ist das ganze thema ehh schwachsinn!
ich frag mich doch bei den heutigen speicherkapazitäten höchstens bei richtig aufwendigen programmen nach dem speicherverbrauch
Medieval Fantasy Online - ORPG Projekt
.NET - Try and Error - Blog - Gemeinschaftsblog
MEt45's Dev Garage - Eigener Blog
Original von MEt45
also irgendwie passt das nicht mehr so ganz zum thema...
für mich ist das ganze thema ehh schwachsinn!
ich frag mich doch bei den heutigen speicherkapazitäten höchstens bei richtig aufwendigen programmen nach dem speicherverbrauch
Eher bei Anwendungen auf Geräten mit echten beschränkungen (momentan) PDAs beispielsweise
Jedes Bit eines Rams ist ein Transistor. Und Transistoren erzeugen genau wie alle andren Komponenten im PC wärme, wenn der Zustand des Bits (Transistor) von 0 auf 1 oder umgekehrt wechselt. Und diese Wärme sollte irgendwie abtransportiert werden. Entweder passiv oder aktiv. Bei aktiv brauchst du wieder mehr Strom (Lüfter).
Nicht ganz korrekt. Jedes Bit des DRAM ist ein Kondensator, der durch einen Transistor gesteuert wird (im Gegensatz zum SRAM).
Richtig ist, dass zum Beschreiben und Auslesen des Speichers Elektorenen bewegt werden müssen und damit Energie verbraucht wird. Nur verliert der Kondensator im DRAM ständig Ladungen (=Wärme). Deshalb wird der Speicher alle paar Milisekunden ausgelesen und wieder neu beschrieben, damit er seinen Wert behält. Das passiert aber, egal ob die entsprechende Adresse vom OS genutzt wird oder nicht.
Damit macht nur die gespeicherte Ladung einen Unterschied aus. Diese ist wiederum von der Zahl der geladenen bzw. ungeladenen Kondensatoren (und damit von den gesetzten bzw. gelöschten Bits, also den Nullen und Einsen) anhängig.
Und diese läßt sich wohl kaum effektiv beeinflussen.
Die einzige Stelle, an der ein Stromverbrauch (und damit Wärmeproduktion) praktisch beeinflusst werden kann, ist somit der Refresh. Daher wird die Betriebsspannung auch immer weiter gesenkt.
Original von daniel
Eher bei Anwendungen auf Geräten mit echten beschränkungen (momentan) PDAs beispielsweise
Und deswegen heissen die Frameworks dort auch "Compact" oder "Micro". Das Cf 2.0 hat - wenn alle Assemblies genutzt werden - einen Footprint von etwa 3 MB (bei 64% Funktionalität gegenüber .NET 2.0).
@ Borg
achso... wieder was gelernt... Hab ich ein glück dass ich Programmierer geworden bin...
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...