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 开始深入挖掘源代码,但请准备好花一些时间,因为涉及的界面会阻碍源代码中的直接导航。
我阅读了很多有关 .Net 中字符串行为的信息。我知道文字字符串 var s = "Hello World!"
默认是驻留的,即使我的应用程序不再引用它,垃圾收集器也永远不会收集该字符串。
从 App.config 读取的字符串会怎样?这些字符串是在运行时构建的吗?
如果不存在引用,s
是否像其他托管对象一样运行并被清理?
var s = System.Configuration.ConfigurationSettings.AppSettings["Hello World!"]
没有
配置字符串是常规字符串,在 运行 时构造 - 配置文件不会编译成程序集,因此不会被编译器保留。
请注意,一般来说,字符串不是来自编译源这一事实并不能说明此类字符串是否被驻留,因为代码可以决定在 运行 时间使用 [=12= 手动驻留字符串] 如果想完全确定,请致电。
如果真的很好奇,您可以尝试从 ConfigurationManager.AppSettings 开始深入挖掘源代码,但请准备好花一些时间,因为涉及的界面会阻碍源代码中的直接导航。