2014-11-14 3 views
0

У меня проблемы с памятью в большой части программного обеспечения, над которым я работаю, я просматриваю методы, которые мы написали, где мы объявляем переменные в начале метода, но они не очищаются (аннулируется или удаляется) в конце метода.Очистка переменных в методах

public static bool CheckIsNumber(string x) 
{ 
    int y; 
    return(int.TryParse(x, out y)); 
} 

как вы видите выше, y никогда не устанавливается на нуль или утилизированы или что-нибудь подобное, я всегда думал, что это будет подобран GC, но после просмотра профайлер памяти, я не уверен, больше.

+0

Это статический метод, который подразумевает (для меня), что он будет длиться всю жизнь приложения и не будет GC'd, как метод экземпляра или переменная. Хотя я мог бы быть waaaaaaaaayyyyyyyyyy. – Tim

+3

Это локальная переменная, она выходит из области видимости при возврате метода. Это не проблема. –

+0

Их подхватит сборщик мусора, но когда это произойдет, это не детерминировано. Несмотря на то, что метод является статическим, область действия 'y' является этим методом, и как только метод завершается, GC знает, что он может их поднять. –

ответ

3

Существует различие между переменной, выходящей из области видимости, и сборкой мусора в .NET. В Microsoft перечислены три условия, которые приведут к сбору мусора:

  1. Система имеет низкую физическую память.
  2. Память, которая используется выделенными объектами в управляемой куче, превосходит допустимый порог.
  3. Вызывается метод GC.Collect.

Источник: http://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx#conditions_for_a_garbage_collection

Когда я смотрел на использование памяти моих .NET-приложений, как правило, они неуклонно расти до определенного момента, после чего сборщик мусора собирает и использование памяти снова падает. Лучшее, что я могу сказать, это то, как он должен работать.