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'».

Могу ли я/должен ли я кэшировать скомпилированную функцию? Должен ли я каким-то образом уничтожить переменную области видимости, когда закончу с ней?


person Jonathan Allen    schedule 14.10.2010    source источник


Ответы (1)


В приведенном вами примере кода ничего особенного не выделяется. Я бы сказал, что маловероятно, что именно этот фрагмент кода вызывает проблему (хотя для окончательного определения требуется больше контекста).

С утечками памяти вы отследите проблему намного быстрее, напрямую исследуя проблему, а не копаясь в коде. Прямые расследования часто быстро сообщают вам, что происходит, и как только вы узнаете, что происходит, вы можете начать исследовать код, который управляет этим типом объекта.

Существует множество инструментов и статей, помогающих отслеживать проблемы с памятью в .Net. Вот особенно хорош.

person JaredPar    schedule 14.10.2010
comment
Инструменты только сообщат мне, какой код утекает сегодня, они не сообщат мне, что станет проблемой в будущем. - person Jonathan Allen; 14.10.2010
comment
@Jonathan, изучение текущих проблем поможет избежать их в будущем. Случайное угадывание — это просто более медленный путь к этому образовательному опыту. - person JaredPar; 14.10.2010