2014-12-11 3 views
-2

У меня есть некоторый код, как это:Освобождение памяти объекта

private void button1_Click(object sender, EventArgs e) 
{ 
    Someclass object= new Someclass(); 
    foreach (conditioin) 
    { 
     some methods(); 
    } 

    object= null; 
} 

Мне нужно, чтобы освободить память объекта becuase каждый раз, когда я нажимаю на кнопку она показывает мне те же результаты. Но методы внутри должны быть забыты и инициализированы новым результатом снова и снова.

Помогите мне, пожалуйста?

$$ ОБНОВЛЕНИЕ $$

ОК, так что я буду предоставлять определенный код

Я использую NativeWiFi

private void button1_Click(object sender, EventArgs e) 
    { 
     listView1.Items.Clear(); 


     WlanClient client = new WlanClient(); 
     foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) 
     { 
      Wlan.WlanBssEntry[] wlanBssEntries = wlanIface.GetNetworkBssList(); 
      foreach (Wlan.WlanBssEntry network in wlanBssEntries) 
      { 
       byte[] macAddr = network.dot11Bssid; 
       string tMac = ""; 
       for (int i = 0; i < macAddr.Length; i++) 
       { 
        tMac += macAddr[i].ToString("x2").PadLeft(2, '0').ToUpper(); 
       } 



       listView1.Items.Add(String.Format("{0}  Signal: {1}% ", (GetStringForSSID(network.dot11Ssid)), network.linkQuality)); 

    /* 
       Console.WriteLine("Signal: {0}%.", network.linkQuality); 
       Console.WriteLine("BSS Type: {0}.", network.dot11BssType); 
       Console.WriteLine("MAC: {0}.", tMac); 

       Console.WriteLine("");*/ 
      } 
     } 

     client = null; 

    } 

    static string GetStringForSSID(Wlan.Dot11Ssid ssid) 
    { 
     return System.Text.Encoding.ASCII.GetString(ssid.SSID, 0, (int)ssid.SSIDLength); 
    } 
+4

Вам не нужно освобождать память. То, что вам нужно, проходит шаг за шагом и выясняет, где вы ошибаетесь. – TomTom

+1

Память освобождается сборщиком мусора. Есть и другие причины ваших ненужных результатов. –

+0

Вы должны предоставить более подробную информацию о своем коде. Какие участники имеют ваш класс и что происходит в конструкторе? Лучше всего сводить код к короткому примеру. Это часто будет отвечать на ваш собственный вопрос, прежде чем вы спросите об этом. –

ответ

2

Это распространенное заблуждение, что установка локальной переменной null освобождает любая память. Поскольку переменная выходит из области действия при выходе из метода в любом случае, линия object = null; не имеет никакого смысла.

Также в .NET вы не можете принудительно освободить память. Мусорная коллекция выполняет свою работу, когда думает, что пришло время.

0

В общем, каждый раз, когда вы выполняете конструктор Someclass(), создается новый объект. В простом C# место в памяти не имеет значения. Все члены будут инициализированы, либо неявно, например. к нулевому или по вашему собственному коду. Если вы получаете одинаковые результаты в каждой итерации цикла, это связано с тем, что инициализация такая же, как и в предыдущих прогонах.

Смежные вопросы