Сборка мусора в CLR для локальных переменных в .Net - PullRequest
0 голосов
/ 09 августа 2011

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

Спасибо, Prayag

Public Shared Function CleanUpSql(ByVal s As String) As String
    Dim sb As New StringBuilder(s.Trim())
    RemoveBrackets(sb)
    FixWhiteSpace(sb)
    TrimSemicolon(sb)
    Return sb.ToString()
End Function

Ответы [ 3 ]

4 голосов
/ 09 августа 2011

В какой-то момент после выполнения покидает ваш метод CleanUpSql и тем самым покидает область, в которой определен sb, StringBuilder, на который ссылается sb, будет собираться мусором.Вы точно не знаете, когда произойдет эта коллекция (и вам, вероятно, все равно).

Объект подлежит сборке мусора, когда никакие переменные в области действия не ссылаются на него.

Выможет запросить , что сбор происходит немедленно с System.GC.Collect() (который в текущей реализации CLR немедленно выполняет сборку мусора).Однако я бы предложил, чтобы вы не делали это - ручная манипуляция с мусором редко необходима.

Если вас интересует более подробная информация, начинайте здесь .

0 голосов
/ 09 августа 2011

Вы создаете sb в стеке, поэтому, как только вызов CleanUpSql завершит работу, sb будет недоступен и будет собирать мусор.Вам даже не нужно делать еще один звонок.

0 голосов
/ 09 августа 2011

В конце концов, это происходит, через некоторое время после того, как sub существует, так как ссылка на объект существует в стеке вызовов.Но он собирается всякий раз, когда CLR чувствует необходимость, а не обязательно, когда вы делаете новый.

...