获得静态list的最佳方法是什么?

本文关键字:方法 是什么 最佳 静态 list | 更新日期: 2023-09-27 17:53:12

我想我需要重新提出我的问题。

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

我的代码现在是这样的:

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

我认为代码1是最快的方法。是否有使用代码2的好理由?

获得静态list的最佳方法是什么?

都不是。静态List<T>的名称听起来像一个被活跃使用的对象(而不是不可变的配置数据),它既不快也不慢:它只是坏了。坏掉的代码运行得有多快并不重要(尽管它运行得越快,你就会越早、越频繁地注意到它的坏掉)。

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

除此之外:那根本不是你的瓶颈。例如,要对列表做什么?搜索?附加吗?从右边移走?从左边开始?通过索引获取?所有这些都是实际花费时间的地方。不是列表引用查找

虽然第一个会快一些,但我想说,从长远来看,通过限制对访问器的访问,第二个将更容易维护。

举一个普通的例子:如果在几周后,您突然需要处理加密或有限的访问权限,那么您只有一个地方可以进行更改。在第一个示例中,您需要在程序中搜索访问列表的位置,这是对时间的低效率利用。特别是在安全性方面,如果您开始在整个程序中转储访问令牌或密钥,甚至可能是危险的。

所以,这取决于你需要什么。在生产环境中,除非方法调用/返回的几个额外周期对目的非常重要(在某些情况下很可能是这种情况),否则我会使用第二个周期。