在运行时向静态字典添加条目的性能

Performance of adding entries to a static dictionary at runtime

在阅读静态词典时,我注意到由于它们是静态的,所以内存中只有一个副本,但您仍然可以添加和删除它们。这样做对性能有何影响?我假设可能会有一个,因为整个字典可能会被复制到内存中。这是正确的还是只是一种误解?

另外,如果复制到内存中的什么地方呢?它会成为 class 的成员,还是 class 的所有实例都可以访问所做的更改,而不仅仅是进行修改的实例?

正如 Bradley 所说,您可能对 C# 的工作原理存在更深层次和更根本的误解。也就是说,在我看来,你的问题相当明确,因为你已经表达了对这个问题的误解,可以解决这些问题。

  1. 最重要的是,直接回答您的问题:不,与实例字段引用的字典对象相比,使用静态字段引用的字典对象没有真正的性能差异。
  2. 作为引用类型(即 class),无论在何处引用字典对象,如果没有代码中的显式声明,它永远不会是 "copied in memory"。 所有引用类型对象都是如此,而不仅仅是字典。
  3. 由静态字段引用,任何有权访问该字段的代码都可以访问此类字典(即,取决于字段的可访问性,privateprotectedinternal, 等等),并且对字典对象的任何修改都将对有权访问该对象的 所有 代码可见。请注意,如果有权访问该字段的代码将对象引用传递给无权访问该字段的代码,则即使无权访问该字段的代码仍将看到该对象,包括对其所做的任何修改。这就是引用类型的工作方式。

上面的答案可能只会对您提出更多问题,因为它们可能与您对 C# 工作方式的某些先入之见相冲突,现在您必须解决这些冲突。我鼓励您从 MSDN 上的 C# 教程和文档开始,尤其是与引用类型如何工作以及内存管理如何工作相关的那些。一旦您纠正了在这些方面的错误观念,上述答案就会更有意义,您对这些事情如何运作的整体理解也会好得多。