2016-08-01 2 views
-1

静的プロパティは、生成されたシミュレーションデータを含むリストを返します。 この例では、文字列からIPAddressを作成して、モバイルデバイスからIPをシミュレートします。 メモリリークのriscは何ですか?非静的リスト付き静的プロパティ<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がクリアされるため、メモリは使用されなくなります。 あなたのケースでは、リストは非常に小さく、オブジェクトは非常に小さいので、私はメモリリークがあるとは思わない。

関連する問題