簡單的記憶體回收指令

System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = New IntPtr(5)
程式使用記憶體會大幅下降 20,000 K 以下
不知道會不會有副作用?


2013 - 03 - 04
即使執行上列命令碼, .NET 在過一段時間後, 又會把記憶體堆疊上去, 並造成 CPU 使用率突然上升, 所以不能常常執行上面的命令碼, 後來上網 google 後, 有發現一段程式碼, 似乎可以解決

For Each asm As Assembly In AppDomain.CurrentDomain.GetAssemblies()
 For Each type As Type In asm.GetTypes()
  If type.ContainsGenericParameters = False Then
   Dim myFieldInfo As FieldInfo = _
    type.GetField("__ENCList", BindingFlags.NonPublic Or BindingFlags.Static)
   If IsNothing(myFieldInfo) = False Then
    Dim obj As Object = myFieldInfo.GetValue(Nothing)
    If obj.GetType.Equals(GetType(List(Of WeakReference))) Then
     Dim al As List(Of WeakReference) = DirectCast(obj, List(Of WeakReference))
     If al.Count > 0 Then
      al.Clear()
     End If
    Else
     Console.WriteLine(myFieldInfo.FieldType)
    End If
   End If
  End If
 Next type
Next asm

留言

熱門文章