Moin.
Bei einer Untersuchung meiner Programme auf Speicherlecks durch Disposable-Ressourcen (die nicht immer alle von allein freigegeben werden durch Garbage-Collection) habe ich festgestellt, dass nach Ausführung irgendwelchen Codes und durch anschließende Freigabe der dort allozierten Daten nicht wieder der Original-Zustand an Speicher-Auslastung eintritt, der vor der Ausführung gegeben war. Wird Code etwa während der Ausführung von Platte nachgeladen und bleibt dann im Speicher? Wenn ja, kann man in etwa abschätzen, wie groß der Faktor von "Exe auf Platte" und "vollständig geladenem Code" ist? Denn selbst bei kleinen Teilen des Codes, wie ich festgestellt habe, wird ziemlich viel Speicher benötigt. Ich meine... die Exe is 200k, der Speicher ändert sich aber schnell mal um einige MB, nur durch Ausführung von Code.
Oder liegt das rein an der Verwendung statischer Variablen/Konstruktoren, dass der Speicher so wächst. Denn das kann ich mir auch nicht so richtig vorstellen, da ich kaum statische Werte verwende und die meist auch nur winzig (ja, ich weiß, static is evil, aber diese werden nur gelesen und erfüllen durchaus ihren Zweck).
Edit:
Ich habe jetzt mal direkt den Speicher vom Garbage-Collector erfragt.
Vor der Ausführung der Code-Blöcke waren ~450k alloziert. Danach ~520k. Erneute Ausführung bewirkt nichts (ja, doch, so +-15 Bytes). Wo kommen die 70k her? Statische Variablen kann nicht sein, Disposable-Ressourcen werden keine verwendet.
Danke im Voraus
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »BlueCobold« (18.07.2010, 11:13)