Vb.net IronPython:这会泄漏内存吗?

Vb.net IronPython:这会泄漏内存吗?,vb.net,memory-leaks,ironpython,dynamic-language-runtime,Vb.net,Memory Leaks,Ironpython,Dynamic Language Runtime,我的程序内存严重泄漏。这是我第一次在紧密循环中使用IronPython,所以我想知道这是否是原因 For Each column In m_Columns Dim rawValue As String rawValue = line.Substring(column.FileColumnIndex.Value - 1, column.FileColumnEndIndex.Value - column.FileColumnIndex.Value + 1) If c

我的程序内存严重泄漏。这是我第一次在紧密循环中使用IronPython,所以我想知道这是否是原因

For Each column In m_Columns

     Dim rawValue As String
     rawValue = line.Substring(column.FileColumnIndex.Value - 1, column.FileColumnEndIndex.Value - column.FileColumnIndex.Value + 1)

     If column.IncludeColumnFunction <> "" Then
        Dim scope = m_ScriptEngine.CreateScope
        scope.SetVariable("Line", line)
        scope.SetVariable("Row", targetRow)
        If Not CBool(m_ScriptEngine.Execute(column.IncludeColumnFunction, scope)) Then Continue For 'skip this column
    End If

    targetRow(column.DatabaseColumnName) = column.ParseValue(rawValue, targetRow)
Next
对于给定列,名为column.IncludeColumnFunction的字符串永远不会更改。它通常很简单,比如“Row['Foo']=='Bar'”

我是否可以/应该缓存已编译的函数?
当我处理完scope变量后,是否应该以某种方式销毁它?

在您提供的代码示例中,没有什么特别突出的地方。我想说的是,这段特定的代码不太可能导致这个问题,尽管需要更多的上下文来确定

对于内存泄漏,通过直接调查问题而不是挖掘代码,您可以更快地跟踪问题。直接调查通常会很快告诉您泄漏了什么,一旦知道泄漏了什么,就可以开始调查管理该类型对象的代码

有很多工具和文章可以帮助我们追踪.Net中的内存问题。这里有一个特别好的


在您提供的代码示例中,没有什么特别突出的地方。我想说的是,这段特定的代码不太可能导致这个问题,尽管需要更多的上下文来确定

对于内存泄漏,通过直接调查问题而不是挖掘代码,您可以更快地跟踪问题。直接调查通常会很快告诉您泄漏了什么,一旦知道泄漏了什么,就可以开始调查管理该类型对象的代码

有很多工具和文章可以帮助我们追踪.Net中的内存问题。这里有一个特别好的


工具只会告诉我今天有什么代码泄漏,而不会告诉我将来会有什么问题。@Jonathan,对当前问题进行自我教育将有助于你将来避免这些问题。随机猜测只是通往这种教育体验的一条较慢的道路。工具只会告诉我今天有什么代码泄漏,而不会告诉我将来会有什么问题。@Jonathan,对当前问题进行自我教育将有助于你将来避免这些问题。随机猜测只是通往这种教育体验的一条较慢的道路。