2010-10-14 160 views
2

我的程序中有大量内存泄漏。这是我第一次在紧密循环中使用IronPython,所以我想知道这是否是原因。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'”一样简单。

我可以/应该缓存编译的函数吗? 当我完成它时,我应该以某种方式销毁作用域变量吗?

回答

0

没有特别突出的代码示例,你在那里。我认为这段代码不太可能导致这个问题(尽管需要更多的上下文才能确定)。

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

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

+0

工具只会告诉我什么码今天漏水,他们不会告诉我,这将是在未来的一个问题。 – 2010-10-14 08:36:39

+0

@Jonathan,教育你自己关于目前的问题**将**帮助你避免他们在将来。随机猜测只是这种教育体验的一条较慢路径。 – JaredPar 2010-10-14 18:24:43