释放对象的内存

本文关键字:内存 对象 释放 | 更新日期: 2023-09-27 18:33:53

我有一些这样的代码:

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

我需要释放对象的内存,因为每次我按下按钮时,它都会显示相同的结果。但是里面的方法应该被遗忘,并重新用新的结果初始化。

你能帮帮我吗?

$$ 更新 $$

好的,所以我会提供特定的代码

我使用原生无线网络

 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);
    }

释放对象的内存

局部变量设置为 null 会释放任何内存是一个常见的误解。由于变量在离开方法时超出了范围,因此object = null;行没有任何意义。

同样在 .NET 中,您不能强制释放内存。垃圾回收在它认为是时候的时候就会完成它的工作。

一般来说,每次执行构造函数Someclass()都会创建一个新对象。在纯 C# 中,内存中的位置无关紧要。所有成员都将被初始化,无论是隐式初始化,例如 null 还是由您自己的代码初始化。如果在每次循环迭代中获得相同的结果,这是因为初始化与前面的运行相同。