2016-08-01 42 views
-1

静态属性返回带有生成的模拟数据的列表。 在这个例子中,我从字符串创建IPAddress来模拟移动设备的IP。 内存泄漏的风险是什么?静态属性与非静态列表<T>

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; 
      } 
     } 
    } 
+0

你在哪里*期待*内存泄漏?如果你知道这一点,你就知道该怎么处理以防止这些。 – HimBromBeere

回答

0

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

在正文中,您会在每次调用中创建一个新的List。这些对象将被返回给呼叫者,并在他们停止使用时收集垃圾。您单独提供的代码段没有内存泄漏的风险。

0

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

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