Memory Flush - Ramverbrauch deutlich senken! Verfasst am: 15.06.2009, 17:53
Hab vorhin im Netz eine sehr interessante Klasse von Cory Smith gefunden:
Code:
Public Class MemoryManagement<br /><br /> Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" ( _<br /> ByVal process As IntPtr, _<br /> ByVal minimumWorkingSetSize As Integer, _<br /> ByVal maximumWorkingSetSize As Integer) As Integer<br /><br /> Public Shared Sub FlushMemory()<br /> GC.Collect()<br /> GC.WaitForPendingFinalizers()<br /> If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then<br /> SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)<br /> End If<br /> End Sub<br /><br />End Class
Diese entlädt alles unnötige aus dem Ram, denn selbst ein Projekt mit nur einer leeren(!) Form braucht 15-16 MB Arbeitsspeicher. Das liegt aber nur daran, dass sich die .Net Anwendungen immer schonmal "vorsichtshalber" mehr reservieren als sie brauchen.
Aufgerufen wird das ganze durch
Code:
MemoryManagement.FlushMemory()
Aber Achtung: Den Code niemals aufrufen wenn euer Programm irgendwelche Berechnungen etc macht. Denn wenn man dabei eine GarbageCollection laufen lässt kann dies zu einer hohen Auslastung führen.
Ihr müsst euch also gut überlegen ob ihr einfach einen Timer nehmt der auch mal zu einen blöden Moment ausgelöst werden kann oder ob ihr genau definiert wann das Programm "ausmisten" soll.
Man kann ja z.b wenn es im Tray läuft einen Timer nehmen und wenn das Prog aktiv ist den Timer ausmachen.