获得静态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>
的"最佳实践"是什么,为什么?
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<T>
的名称听起来像一个被活跃使用的对象(而不是不可变的配置数据),它既不快也不慢:它只是坏了。坏掉的代码运行得有多快并不重要(尽管它运行得越快,你就会越早、越频繁地注意到它的坏掉)。
除此之外,当JIT完成内联时,所示的两个选项之间几乎没有任何明显的差异。
除此之外:那根本不是你的瓶颈。例如,要对列表做什么?搜索?附加吗?从右边移走?从左边开始?通过索引获取?所有这些都是实际花费时间的地方。不是列表引用查找
虽然第一个会快一些,但我想说,从长远来看,通过限制对访问器的访问,第二个将更容易维护。
举一个普通的例子:如果在几周后,您突然需要处理加密或有限的访问权限,那么您只有一个地方可以进行更改。在第一个示例中,您需要在程序中搜索访问列表的位置,这是对时间的低效率利用。特别是在安全性方面,如果您开始在整个程序中转储访问令牌或密钥,甚至可能是危险的。
所以,这取决于你需要什么。在生产环境中,除非方法调用/返回的几个额外周期对目的非常重要(在某些情况下很可能是这种情况),否则我会使用第二个周期。