【发布时间】:2013-04-26 09:43:59
【问题描述】:
我的理解(可能是错误的)是,在 c# 中,当您创建一个字符串时,它会被实习到“实习池”中。这保留了对字符串的引用,以便多个相同的字符串可以共享操作内存。
但是,我正在处理很多很可能是唯一的字符串,一旦完成每个字符串,我需要将它们从操作内存中完全删除,我不确定如何删除缓存的引用,所以该垃圾收集器可以从内存中删除所有字符串数据。我怎样才能防止字符串被困在这个缓存中,或者我怎样才能清除它/或从中删除一个字符串,以便它肯定会从操作内存中删除?
【问题讨论】:
-
除了默认行为之外,您想做其他事情的动机是什么?
-
让 GC 完成它的工作。
-
不是每个字符串都会被拘留,only literal strings。
-
好吧,但我猜如果引用保存在这个实习池中,GC不会只是从操作内存中删除字符串?或者它怎么知道哪个字符串可以删除,哪个不能删除?
-
我的理解是,默认情况下,只有当它们是编译时常量或者你在它们上使用
String.Intern时,字符串才会被保留,正如broadcast.oreilly.com/2010/08/… 解释的那样。