在C#for循环中创建新对象时,幕后内存会发生什么变化?

时间:2015-12-08 23:44:43

标签: c# memory garbage-collection allocation contiguous

我试图了解何时分配内存以及垃圾收集器何时收集垃圾。让我们说我有一些像这样的代码:

foreach (FileInfo f in File){
    foreach (DataAtrribute d in f){
        string name = d.name;
    }
}

假设有一千个FileInfo对象保存在File对象内的数组中。让我们说每个FileInfo对象内部是一个包含多个DataAttribute对象的集合。这个代码是否会导致多个内存块被反复保留为"字符串名称"因为没有一个名为name的静态字符串,而是在做' string name = d.name"一遍又一遍?或者垃圾收集器的工作速度是否足够快以避免这种情况并保持空闲内存的连续性?

感谢。

1 个答案:

答案 0 :(得分:2)

moduleParse['modules'].push(readModule); 定义对堆栈上string name = d.name;的引用,并将该引用指定为指向内存中的现有string对象,因此没有任何堆分配