Configuration.ConfigurationSettings.AppSettings 值是驻留字符串吗?

Are Configuration.ConfigurationSettings.AppSettings values interned strings?

我阅读了很多有关 .Net 中字符串行为的信息。我知道文字字符串 var s = "Hello World!" 默认是驻留的,即使我的应用程序不再引用它,垃圾收集器也永远不会收集该字符串。

从 App.config 读取的字符串会怎样?这些字符串是在运行时构建的吗?

如果不存在引用,s 是否像其他托管对象一样运行并被清理?

var s = System.Configuration.ConfigurationSettings.AppSettings["Hello World!"]

没有

配置字符串是常规字符串,在 运行 时构造 - 配置文件不会编译成程序集,因此不会被编译器保留。

请注意,一般来说,字符串不是来自编译源这一事实并不能说明此类字符串是否被驻留,因为代码可以决定在 运行 时间使用 [=12= 手动驻留字符串] 如果想完全确定,请致电。

如果真的很好奇,您可以尝试从 ConfigurationManager.AppSettings 开始深入挖掘源代码,但请准备好花一些时间,因为涉及的界面会阻碍源代码中的直接导航。