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

本文关键字:性能 添加 字典 运行时 静态 | 更新日期: 2023-09-27 18:36:13

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

另外,如果是的话,它会复制到内存中的什么位置?它是否会成为类的成员,或者所做的更改是否可供类的所有实例访问,而不仅仅是进行修改的实例?

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

正如 Bradley 所建议的那样,您对 C# 的工作原理可能存在更深层次、更根本的误解。也就是说,在我看来,你的问题相当清楚,因为你已经表达了你对这个问题的误解,允许它们得到解决。

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

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