Хорошо, спасибо некоторым пользователям (@jmcilhinney, @ Anu6is), которые потратили много времени, помогая мне учиться, я публикую свой ответ.
Правильный синтаксис для освобождения локальных ресурсов в методе таков:
Function GetString() As String
Try()
Dim sb As New StringBuilder
sb.AppendLine("my first line")
Return sb.ToString()
Catch()
Return Nothing
Finally()
'N.B. Good practice don't write
'sb = Nothing
End Try()
End Function
Пожалуйста, обратите внимание, что в утверждении «Я» я написал «Хорошая практика», чтобы не писать »
sb = Nothing
Почему?
Поскольку каждая локальная переменная внутри метода, когда выполнение кода выходит из метода, автоматически «очищается» сборщиком мусора (сборщик мусора освобождает память, ранее занятую локальными переменными, но если при выполнении кода будет использоваться снова метод перед запуском сборщика мусора, ранее занятая область памяти будет перераспределена указателем новых экземпляров локальных переменных).
Другой подход, когда метод использует нелокальную переменную:
Class MyClass
Dim sb As New StringBuilder
Friend Function GetString(ByVal text as String()) As String
Try()
For Each Txt As String In text
sb.AppendLine(Txt)
Next Txt
Return sb.ToString
Catch()
Return Nothing
Finally()
'Here i can write:
'sb.Clear
'or
'sb = Nothing
End Try()
End Function
End Class
Почему в этом случае целесообразно установить для переменной значение Nothing или (в этом случае) освободить память, занятую значением StringBuilder?
Может быть, если в качестве примера я использую метод в начале программы, а не более.
Или, если StringBuilder «хранит» огромное количество данных, в течение длительного времени.
В этом случае мы «выбираем» установить для StringBuilder значение Nothing, чтобы освободить занятую память, которая не будет использоваться программой.
В этой статье подробно объясняются случаи, когда рекомендуется устанавливать для переменной значение Nothing внутри метода.
https://blog.stephencleary.com/2010/02/q-should-i-set-variables-to-null-to.html
После этого может возникнуть вопрос:
'Но если я подожду, когда сборщик мусора "освободит" память, как долго мне ждать? ... тики ... миллисекунды, ... секунды, ... минуты ...?
Вот ссылка, которая может помочь:
https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals