Memory Flush - Ramverbrauch deutlich senken! Verfasst am: 02.12.2007, 12:52
Hab vorhin im Netz eine sehr interessante Klasse von Cory Smith gefunden:
Code:
Public Class MemoryManagement
Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" ( _
ByVal process As IntPtr, _
ByVal minimumWorkingSetSize As Integer, _
ByVal maximumWorkingSetSize As Integer) As Integer
Public Shared Sub FlushMemory()
GC.Collect()
GC.WaitForPendingFinalizers()
If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)
End If
End Sub
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.
Anmeldedatum: 17.12.2007 Beiträge: 315 Wohnort: Private Class _ Villa()
Verfasst am: 19.02.2008, 10:07
Super geil, vielen dank
Durch diese tolle Klasse habe ich mal eben den Ressourcen Verbrauch meines Programmes von 10.356K auf 4.616K gesenkt
Code:
CA2001 : Microsoft.Reliability : Entfernen Sie den Aufruf an GC.Collect aus "'MemoryManagement.FlushMemory()'". Das Erzwingen von Garbage Collection ist normalerweise nicht erforderlich und kann die Leistung wesentlich herabsetzen.