我想知道.NET的string.Remove()方法如何处理内存。
如果我有以下代码:
string sample = "abc";
sample = sample.Remove(0);
内存中实际上会发生什么?
如果我理解正确,我们已经分配了一个由3个字符组成的字符串,然后将其全部删除到了该字符串的新副本上,并通过覆盖该副本将其分配给旧引用,然后呢?这三个字符会怎样?
如果我们不再指向它们,并且没有释放它们(至少我没有意识到),它们将作为垃圾保留在内存中。
但是,我确信CLR可以通过某种方式对其进行检测并最终释放它们。
你们中的任何人都知道这里会发生什么吗?提前致谢!
最佳答案
首先,Remove
将创建一个没有字符的新字符串(一个空字符串)。这将涉及为char数组分配一个string
对象以包装它。然后,您将对该字符串的引用分配给本地变量。
由于字符串"abc"
是文字字符串,除非您已禁用对编译时文字字符串的内部检查,否则它仍将存在于内部缓冲池中,因此不会被垃圾回收。
因此,总而言之,您已经创建了两个新对象,并将变量sample
的引用从旧对象更改为新对象。
关于c# - String.Remove()如何针对内存进行操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35997030/