2016-08-01 79 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被清除,所以內存不再使用。 在你的情況下,列表是如此之小,對象是如此之小,我不認爲會有內存泄漏