Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取静态列表的最佳方法是什么<;T>;?_C#_List_Static - Fatal编程技术网

C# 获取静态列表的最佳方法是什么<;T>;?

C# 获取静态列表的最佳方法是什么<;T>;?,c#,list,static,C#,List,Static,我想我需要重新提出我的问题 我的问题是。在我的整个项目中,获得相同列表的最佳方法是什么 我的代码现在看起来像这样: public static class MessagingController { static List<MessagingDelivery> MessagingDeliveryList = Messaging.GetMessagingDeliveryList(); } internal static class Messaging { static Li

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

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

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

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; }
}
公共静态类MessagingController
{
静态列表MessagingDeliveryList=消息传递。GetMessagingDeliveryList();
}
内部静态类消息传递
{
静态列表消息传递列表;
静态消息传递()
{MessagingDeliveryList=新列表();}
内部静态void CreateMessagingText(短引用、短编号、字符串文本)
{MessagingDeliveryList.Add(新的MessagingDelivery(引用、编号、文本));}
内部静态void ChangeMessagingDelivery(短引用、字符串状态、字符串错误)
{MessagingDelivery.ChangeStatus(引用、状态、错误);}
内部静态列表GetMessagingDeliveryList()
{返回MessagingDeliveryList;}
}
老问题:

获取
静态列表的“最佳实践”是什么?为什么

代码1:

public static List<MessagingDelivery> messagingDeliveryList
    = Messaging.GetMessagingDeliveryList();
公共静态列表消息发送列表
=Messaging.GetMessagingDeliveryList();
代码2:

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

public static List<MessagingDelivery> MessagingDeliveryList
    { get { return messagingDeliveryList; } }
静态列表消息发送列表
=Messaging.GetMessagingDeliveryList();
公共静态列表MessagingDeliveryList
{get{return messagingDeliveryList;}}

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

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

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


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

而第一个周期会快一些,我想说的是,通过限制对访问器的访问,从长远来看,第二个将更容易维护

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


所以,这取决于你需要什么。在生产环境中,除非一个方法调用/返回的几个额外周期对于这个目的很重要(在某些情况下可能是这样),否则我将使用第二个周期。静态
列表
的名称听起来像是一个活动使用的对象(而不是,比如说,不变的配置数据),它既不快也不慢:它只是被破坏了。中断的代码运行得有多快并不重要(尽管它运行得越快,您会越早、越频繁地注意到它中断)

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


除此之外:这根本不是你的瓶颈。例如,您打算对列表做什么?搜索?追加从右边移走?从左边?按索引提取?所有这些都是实际花费时间的地方。不是列表引用查找。

也不是。静态
列表
的名称听起来像是一个活动使用的对象(而不是,比如说,不变的配置数据),它既不快也不慢:它只是被破坏了。中断的代码运行得有多快并不重要(尽管它运行得越快,您会越早、越频繁地注意到它中断)

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


除此之外:这根本不是你的瓶颈。例如,您打算对列表做什么?搜索?追加从右边移走?从左边?按索引提取?所有这些都是实际花费时间的地方。不是列表引用查找。

如果您只需要简单地获取列表,那么就没有理由使用代码2。静态在这里并不重要,更多的是关于字段和属性之间的差异:您可以列出两者在功能/性能方面的差异,或者引用讨论这两个选项的源代码吗?如果你不能,那么这个问题就没有什么意义了。你认为这会是你代码中最大的性能问题吗?如果你只需要简单地获取列表,那么就没有理由使用代码2。
静态
在这里不重要,更多的是关于字段和属性之间的区别:您能否列出这两个选项在功能/性能方面的区别,或者引用一个讨论这两个选项的来源?如果你不能,那么这个问题就没有什么意义了。你认为这会成为你代码中最大的性能问题吗?我认为不会更快。JIT编译器无论如何都会对其进行优化。这很难说。考虑到访问器可以做什么,它可能不值得本质上的语义级优化(当然,我们可以只检查CIL,但是…)。无论哪种方式,我们谈论的可能最多是一打指令。几乎看不到。我认为不会更快。JIT编译器无论如何都会对其进行优化。这很难说。考虑到访问器可以做什么,它可能不值得本质上的语义级优化(当然,我们可以只检查CIL)