【发布时间】:2016-03-14 20:06:10
【问题描述】:
我想知道 .NET 的 string.Remove() 方法是如何处理内存的。
如果我有以下代码:
string sample = "abc";
sample = sample.Remove(0);
内存中实际会发生什么?
如果我理解正确,我们分配了一个由 3 个字符组成的字符串,然后我们在字符串的新副本上删除了所有这些字符,将副本分配给旧引用,然后覆盖它,然后是什么?这三个角色会发生什么?
如果我们不再指向它们,并且它们没有被释放(至少我不知道),它们将作为垃圾留在内存中。
但是,我确信 CLR 有某种方法可以检测到它并最终释放它们。
那么你们中的任何人都知道这里发生了什么吗?提前致谢!
【问题讨论】:
-
是的,CLR 有一个垃圾收集器(即实际术语),它会定期运行并释放未使用的对象。
-
听起来您实际上有一个问题,例如“如何安全地从内存中擦除字符串?”,并且您想知道
string.Remove是否是正确的方法。也许您应该询问前一个问题(作为一个新的 SO 问题),并提供有关您的特定场景的一些详细信息。 -
@Blorgbeard 从技术上讲,你是对的,我应该问像后者这样的问题,但我自己明白,如果这个问题的答案与 GC 相关,那么任何人都不安全意思是。