我在.Net中读了很多关于字符串行为的内容。我知道默认情况下文字字符串var s = "Hello World!"
是固定的,即使我的应用程序不再引用它,垃圾收集器也不会收集该字符串。
从App.config读取的字符串会发生什么?那些字符串是在运行时构造的吗?
s
是否与其他托管对象一样,如果不存在引用,是否会被清理?
var s = System.Configuration.ConfigurationSettings.AppSettings["Hello World!"]
答案 0 :(得分:0)
没有
配置字符串是常规字符串并在运行时构造 - 配置文件不会编译到程序集中,因此不会被编译器实现。
请注意,一般情况下,字符串不是来自编译源的事实说明这些字符串是否被中断,因为代码可以决定在运行时使用String.Intern
手动实习字符串。我不希望配置解析代码到实习生字符串 - 如果想要完全确定,应该很容易通过String.IsInterned
调用来检查。
如果真的好奇,你可以尝试从ConfigurationManager.AppSettings开始挖掘源代码,但准备花一些时间,因为涉及的界面会掩盖源中的直接导航。