【发布时间】:2011-08-20 16:15:15
【问题描述】:
与正常的 foreach 循环相反,使用 lambda 表达式会为 GC 生成垃圾吗?
// Lambda version
Foos.ForEach(f=>f.Update(gameTime));
// Normal approach:
foreach (Foo f in Foos)
{
f.Update(gameTime);
}
CLR 分析器显示我有 69.9% 的 system.Action 并且我怀疑它是上述 foreach 循环的 Lamba 版本。这是真的吗?
编辑:我使用了 Microsoft CLR 分析器:http://download.microsoft.com/download/4/4/2/442d67c7-a1c1-4884-9715-803a7b485b82/clr%20profiler.exe 或http://msdn.microsoft.com/en-us/library/ff650691.aspx
【问题讨论】:
-
您能否也发布您的 foo 和 foos 的类型定义?
-
真的希望你选择一个更好的例子,因为
ForEach绝对没有任何用处。 -
@Shiraz:使用我惊人的推理能力,
Foos是List<Foo>,Foo是你喜欢的任何类。为了这个问题没关系。 -
是的,我会说一个列表,因为只有通用列表具有 .ForEach() 方法(无论如何我都知道)。
-
Foo 的定义......嗯......它只是一个类(或结构),它包含各种变量,如字符串和纹理等。然而,那些 foo 类在调用它们的 Update() 时不会自己生成垃圾。他们使用对象池等。