获取静态List <t>的最佳方法是什么?</t>

时间:2014-03-26 00:03:01

标签: c# list static

我认为需要改写我的问题。

我的问题是。获得我可以在整个项目中使用的相同列表的最佳方法是什么?

我的代码现在看起来像这样:

public static class MessagingController
{
  static List<MessagingDelivery> MessagingDeliveryList = Messaging.GetMessagingDeliveryList();
}


internal static class Messaging
{
  static List<MessagingDelivery> MessagingDeliveryList;

  static Messaging()
  { MessagingDeliveryList = new List<MessagingDelivery>(); }

  internal static void CreateMessagingText(short reference, short number, string text)
  { MessagingDeliveryList.Add(new MessagingDelivery(reference, number, text)); }


  internal static void ChangeMessagingDelivery(short reference, string status, string error)
  { MessagingDelivery.ChangeStatus(reference, status, error); }


  internal static List<MessagingDelivery> GetMessagingDeliveryList()
  { return MessagingDeliveryList; }
}

老问题:

获得static List<T>的“最佳做法”是什么?为什么?

代码1:

public static List<MessagingDelivery> messagingDeliveryList
    = Messaging.GetMessagingDeliveryList();

代码2:

static List<MessagingDelivery> messagingDeliveryList
    = Messaging.GetMessagingDeliveryList();

public static List<MessagingDelivery> MessagingDeliveryList
    { get { return messagingDeliveryList; } }

我认为Code 1是最快的方法。是否有充分理由使用Code 2?

2 个答案:

答案 0 :(得分:6)

都不是。静态List<T>的名称听起来像一个活跃使用的对象(而不是,例如,不可变的配置数据)不是快或慢:它只是被打破。破坏代码的运行速度并不重要(尽管它运行得越快,你就会越早意识到它会中断)。

除此之外,当JIT完成内联时,所显示的两个选项之间几乎没有任何明显差异。

除此之外:这根本不是你的瓶颈。例如,您要对列表进行执行的操作是什么?搜索?附加?从右边移除?从左边?按索引获取?所有这些都是实际花费的时间。不是列表引用查找。

答案 1 :(得分:0)

虽然第一个是头发更快,但我会说第二个是通过限制对访问者的访问来更容易维护。

选择一个平庸的例子:如果在几周内,您突然需要处理加密或有限的访问权限,那么您只有一个地方可以进行更改。在第一个示例中,您需要在程序中搜索访问列表的位置,这对您的时间的使用效果要差得多。特别是,为了安全起见,如果你在整个程序中开始转储访问令牌或密钥,那么它甚至可能是危险的。

所以,这取决于你需要什么。在生产中,除非方法调用/返回的几个额外周期对于此目的而言意义重大(在某些情况下可能是这种情况),我会选择第二个。