我在应用程序中发现了内存泄漏。每次我调用Process.GetProcesses时,我的应用程序的内存使用量都会增长,并且在应用程序关闭之前不会释放。由于我需要大约每10秒调用一次,因此应用程序只能运行几个小时才能崩溃内存不足。我在这个网站上发现了这篇文章,但它看起来并不像它的解决方案。 Process.GetProcessesByName(String, String) Memory Leak
这是我的代码:
Public Shared Function GetProcessInfo() As List(Of ClientResources_OBJECT.ProcessInfo)
Try
Dim ProcessInfoList As New List(Of ClientResources_OBJECT.ProcessInfo)
For Each Proc As Process In Process.GetProcesses
Dim PI As New ClientResources_OBJECT.ProcessInfo
With PI
.Name = Proc.ProcessName
.PID = Proc.Id
.Responding = Proc.Responding
End With
ProcessInfoList.Add(PI)
'cleanup resources
Proc.Dispose()
Proc = Nothing
PI = Nothing
Next
PerformanceCounter.CloseSharedResources()
GC.Collect()
Return ProcessInfoList
Catch ex As Exception
Dim st As New StackTrace(True)
st = New StackTrace(ex, True)
Console.WriteLine(Err.Description, Err.Number, System.Reflection.MethodInfo.GetCurrentMethod.Name, st.GetFrame(0).GetFileLineNumber().ToString)
End Try
Return Nothing
End Function
有人在另一个问题中提到:
警告:这只是一个非常脏的quickfix,但使用反射 杀掉他们。
访问私有变量:我可以更改私有只读字段吗? C#使用反射?
使用静态类的示例:使用Reflection设置静态变量 在对象初始化之前的值? (C#)
您可以使用的变体 typeof(Process).GetFields(BindingFlags.Static | BindingFlags.NonPublic)查找字段等。
我认为,由于Process的行为,因此需要快速修复 显然不正确。
我不确定这意味着任何人可以提供帮助,或者有人知道如何克服这个问题吗?
谢谢