ElBavaro Ответов: 1

Статическое свойство с нестатическим списком<T>


Статическое свойство возвращает список с сгенерированными данными моделирования.

В этом примере я создаю IP-адрес из строк для имитации 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;
           }
       }
   }


Что я уже пробовал:

Другой подход состоит в том, чтобы сделать все нестатичным. это не проблема, но я хочу использовать это значение моделирования в статическом методе.

lukeer

Я не вижу никакого риска утечки памяти в этом коде.
Но тот факт, что вы спрашиваете, заставляет меня поверить, что вы думаете о статический иметь в виду то, чего на самом деле нет.

То статический ключевое слово - это не управление памятью, а видимость (например, частный, общественный, прием).

Richard Deeming

Э-э, нет.

То static ключевое слово не имеет ничего общего с видимостью. Это вполне возможно иметь public static или private static или internal static.

То static ключевое слово относится к тому, принадлежит ли член самому типу или к экземпляру этого типа.

lukeer

Ладно, не то слово. Может быть, доступность?
Вы не можете получить доступ к переменным экземпляра из статического метода (если только не создадите экземпляр и не используете его, но вы понимаете, что я имею в виду, не так ли?) но вы можете получить доступ к статическим переменным из методов экземпляра.

Tomas Takac

Сбросьте статику, сделайте все это экземпляром, а затем назовите его так: new IPFactory.Simulate(). Вы должны опубликовать код, в котором это используется.

1 Ответов

Рейтинг:
6

johannesnestler

Никакой утечки памяти - как ты думаешь? - но нет необходимости воссоздавать один и тот же список снова и снова при каждом доступе к свойству. Просто создайте статическую переменную списка и инициализируйте ее один раз (если null), а затем верните список.