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

What happens to memory behind the scenes when creating new objects inside of C# for loops?

我试图了解何时分配内存以及垃圾收集器何时收集垃圾。假设我有这样的代码:

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

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

谢谢。

string name = d.name; 在堆栈上定义对 string 的引用,并将该引用分配给指向内存中现有的 string 对象,因此没有任何堆分配.