2010-10-14 158 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