Speicherbedarf Framework + Assembly

09/07/2008 - 10:41 von Walter Sporn | Report spam
Hallo!

Ich habe eine Windows-Applikation (C#2.0, VS2005), die als Client auf
verschiedenen Rechnern bei Kunden làuft.
Nun hat sich ein Kunde beschwert, dass im Betrieb der Applikation auf einem
Terminal-Server zu viel Speicher verbraucht wird.

Deshalb hab ich etwas herumgeforscht und herausgefunden, dass die
Applikation initial pro Instanz ca. 70.000 kB Speicher verbraucht. Nutzt man
alle Funktionalitàten (CrystalReports oder verschiedene
Fremdanbieter-Controls), dann steigt der Speicherverbrauch auch schnell mal
auf 120.000 kB laut Task-Manager. Wenn man sich vorstellt, dass 8 Instanzen
im Terminalbetrieb laufen, dann sind schon 1GB RAM notwendig. Sollte
eigentlich in der heutigen Zeit kein Problem mehr sein, oder?

Kann/muss ich etwas optimieren, oder kann ich den Kunden höflich um die
Ausstattung des Servers mit mehr Speicher bitten?

Vielen Dank für Eure Kommentare und Tips.

Schöne Grüße
Walter
 

Lesen sie die antworten

#1 Frank Dzaebel
09/07/2008 - 11:00 | Warnen spam
Hallo Walter,

... Deshalb hab ich etwas herumgeforscht und herausgefunden, dass die
Applikation initial pro Instanz ca. 70.000 kB Speicher verbraucht. Nutzt man
alle Funktionalitàten (CrystalReports oder verschiedene
Fremdanbieter-Controls), dann steigt der Speicherverbrauch auch schnell mal
auf 120.000 kB laut Task-Manager. Wenn man sich vorstellt, dass 8 Instanzen
im Terminalbetrieb laufen, dann sind schon 1GB RAM notwendig. Sollte
eigentlich in der heutigen Zeit kein Problem mehr sein, oder?



Walter, auf einem Terminalserver musst Du Dir
aber vorstellen, dass da vielleicht 10 Applikationen
gleichzeitig vorhanden sind, die diesen Speicher
haben wollen !
Das gleiche gilt für die Threads. Auch da solltest
Du sehr sparsam mit umgehen. *Alle* (ggf. knappen)
shared Ressourcen.




Kann/muss ich etwas optimieren, oder kann ich den Kunden
höflich um die Ausstattung des Servers mit mehr Speicher bitten?



naja, im TS-Szenario ggf. Dinge nicht im Speicher
halten, sondern auf die Platte auslagern, auch, wenn
es dann mal dafür etwas lànger dauert (ggf. einstellbar).

In *einigen* Situationen (z. prüfen) auch:

[pinvoke.net: SetProcessWorkingSetSize (kernel32)]
http://www.pinvoke.net/default.aspx...tSize.html


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen