想象一下这段代码:
int i=9999999;
while ( i > 1 )
{
string UnusedMemory="this is a string that eats some ram" + i.ToString();
i--;
}
如果仅在运行时才删除未引用的对象GC.Collect()
,则此代码应分配大量内存,直到发生收集。但它根本没有分配巨大的内存,为什么?是否在 IL 级别实施了某种“删除”?还是GC.Collect()
自动调用更快?我知道这是一个微不足道的例子,但如果它更复杂并且在该代码块中访问字符串,它无论如何也不会吃很多内存。
编辑:我更改了示例,使字符串始终是唯一的,因此不能“缓存”