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

Tools только сказать мне, что код протекает сегодня, они не будут говорить мне, что будет проблемой в будущем. –

+0

@ Джонатан, воспитывая себя в текущих проблемах ** ** поможет вам избежать их в будущем. Случайное угадывание - это всего лишь более медленный путь к этому образованию. – JaredPar