我认为需要改写我的问题。
我的问题是。获得我可以在整个项目中使用的相同列表的最佳方法是什么?
我的代码现在看起来像这样:
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?
答案 0 :(得分:6)
都不是。静态List<T>
的名称听起来像一个活跃使用的对象(而不是,例如,不可变的配置数据)不是快或慢:它只是被打破。破坏代码的运行速度并不重要(尽管它运行得越快,你就会越早意识到它会中断)。
除此之外,当JIT完成内联时,所显示的两个选项之间几乎没有任何明显差异。
除此之外:这根本不是你的瓶颈。例如,您要对列表进行执行的操作是什么?搜索?附加?从右边移除?从左边?按索引获取?所有这些都是实际花费的时间。不是列表引用查找。
答案 1 :(得分:0)
虽然第一个是头发更快,但我会说第二个是通过限制对访问者的访问来更容易维护。
选择一个平庸的例子:如果在几周内,您突然需要处理加密或有限的访问权限,那么您只有一个地方可以进行更改。在第一个示例中,您需要在程序中搜索访问列表的位置,这对您的时间的使用效果要差得多。特别是,为了安全起见,如果你在整个程序中开始转储访问令牌或密钥,那么它甚至可能是危险的。
所以,这取决于你需要什么。在生产中,除非方法调用/返回的几个额外周期对于此目的而言意义重大(在某些情况下可能是这种情况),我会选择第二个。