Process.GetProcesses中的内存泄漏

时间:2014-10-06 21:23:43

标签: .net vb.net memory dispose memory-consumption

我在应用程序中发现了内存泄漏。每次我调用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的行为,因此需要快速修复   显然不正确。

我不确定这意味着任何人可以提供帮助,或者有人知道如何克服这个问题吗?

谢谢

0 个答案:

没有答案