0

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

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

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

谢谢。

4

1 回答 1

2

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

于 2015-12-08T23:50:28.877 回答