Configuration.ConfigurationSettings.AppSettings值是否为实习字符串?

时间:2015-05-05 16:30:41

标签: c# string garbage-collection runtime

我在.Net中读了很多关于字符串行为的内容。我知道默认情况下文字字符串var s = "Hello World!"是固定的,即使我的应用程序不再引用它,垃圾收集器也不会收集该字符串。

从App.config读取的字符串会发生什么?那些字符串是在运行时构造的吗?

s是否与其他托管对象一样,如果不存在引用,是否会被清理?

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

1 个答案:

答案 0 :(得分:0)

没有

配置字符串是常规字符串并在运行时构造 - 配置文件不会编译到程序集中,因此不会被编译器实现。

请注意,一般情况下,字符串不是来自编译源的事实说明这些字符串是否被中断,因为代码可以决定在运行时使用String.Intern手动实习字符串。我不希望配置解析代码到实习生字符串 - 如果想要完全确定,应该很容易通过String.IsInterned调用来检查。

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