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

时间:2015-01-05 19:56:46

标签: c# performance memory dictionary

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

此外,如果它在哪里被复制到内存中?它会成为该类的成员还是所有类的实例都可以访问所做的更改,而不仅仅是进行修改的实例?

1 个答案:

答案 0 :(得分:1)

正如布拉德利所说,对于C#的工作方式,你可能会有更深刻和更根本的误解。也就是说,在我看来,你的问题是相当清楚的,因为你已经表达了你对这个问题的误解,允许它们被解决。

  1. 最重要的是,直接回答你的问题:不,使用静态字段引用的字典对象与实例字段引用的字典对象相比,没有真正的性能差异。
  2. 作为一个引用类型(即class)一个字典对象,无论它在哪里被引用,都不会被复制到内存中#34;在代码中没有明确的声明来这样做。 所有引用类型对象都是如此,而不仅仅是字典。
  3. 被静态字段引用,任何有权访问该字段的代码都可以访问这样的字典(即取决于字段的可访问性,privateprotected,{{1}对于有权访问该对象的所有代码,对字典对象的任何修改都是可见的。请注意,如果有权访问该字段的代码将对象引用传递给无法访问该字段的代码,则即使是无法访问该字段的代码仍会看到该对象,包括对其进行的任何修改。这就是参考类型的工作原理。
  4. 上述答案可能只会引起更多问题,因为它们可能会与您对C#工作方式的某些先入之见发生冲突,现在您必须解决这些冲突。我鼓励您从MSDN上的C#教程和文档开始,特别是那些与参考类型如何工作以及内存管理如何工作有关的教程和文档。一旦你纠正了这些方面的误解,上面的答案会更有意义,而你对这些事情如何运作的整体理解会更好。