2011-03-30 52 views
2

我在實現IEnumerable接口的對象池中有以下代碼。IEnumerable垃圾創建

public IEnumerable<T> ActiveNodes 
{ 
    get 
    { 
     for (int i = 0; i < _pool.Count; i++) 
     { 
      if (_pool[i].AvailableInPool) 
      { 
       yield return _pool[i]; 
      } 
     } 
    } 
} 

在_pool元素都永遠不會被收集,爲池的目的是保持引用他們都避免垃圾產生。

此代碼中的任何內容是否會生成垃圾?

(也許C#創建稍後將被收集一個IEnumerable對象?)

回答

3

這段代碼是否生成了 垃圾?

是,yield return創建臨時文件IEnumerable<T>

1

C#生成一個IEnumerable對象,這將需要被收集,並且該枚舉對象將創建這也將需要收集一些枚舉對象。如果你想遵循IEnumerable模式,儘管很難避免這些模式。