具有非静态List <t>的静态属性

时间:2016-08-01 09:42:07

标签: c# static

静态属性返回带有生成的模拟数据的List。 在此示例中,我从字符串创建IPAddress以模拟来自移动设备的IP。 内存泄漏的风险是什么?

    static readonly string[] IPv6Simu = { "fe80::3a6d:eeeb:8bff:4ef2", "fc01:abab:cdcd:efe0:49d2:473:579c:cfaa" };
    static readonly string[] IPv4Simu = { "172.22.1.100", "172.22.1.100" };
    static readonly string[] InterfaceName = { "mnet1", "mnet0" };

   public static List<IpData> StaticSimulateIPFactory
    { get
        {
            List<IpData> simu = new List<IpData>();
            try
            {
                IPAddress ip;
                foreach (var IPv6 in IPv6Simu)
                {
                    if (IPAddress.TryParse(IPv6, out ip))
                    {
                        simu.Add(new IpData() { InterfaceName = InterfaceName.FirstOrDefault(), IPAddress = ip });
                    }
                }
                foreach (var IPv4 in IPv4Simu)
                {
                    if (IPAddress.TryParse(IPv4, out ip))
                    {
                        simu.Add(new IpData() { InterfaceName = InterfaceName.FirstOrDefault(), IPAddress = ip });
                    }
                } 
                return simu;
            }
            catch (Exception)
            {
                simu.Add(new IpData() { InterfaceName = "INV", IPAddress = new IPAddress(new byte[]{127,0,0,1} )});
                return simu;
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您的属性是静态的,这意味着您可以在没有该类实例的情况下访问它。这并不意味着存在一些隐含的数据,这些数据在类中是持久的。

在正文中,您可以在每次通话中创建新的List。这些对象将在他们停止使用时返回给调用者并收集垃圾。单独提供的代码段不存在内存泄漏的风险。

答案 1 :(得分:0)

Memory Leaks本身是代码中的一部分,它消耗内存,但在消耗后不会释放它们。 例如:如果创建一个全局Object来保存对大型对象的引用(不实现IDisposable),则GC无法释放内存。在某些情况下,即使程序已经结束,内存仍处于“使用中”状态。

重启后,RAM被清除,因此不再使用内存。 在你的情况下,列表是如此之小,对象是如此之小,我不认为会有内存泄漏

相关问题