gpt4 book ai didi

c# - 匿名函数在循环中占用更多内存

转载 作者:行者123 更新时间:2023-11-30 15:20:27 31 4
gpt4 key购买 nike

我在想。下面的代码片段是否比第二个代码片段消耗更多的内存

List<Action> myList = new List<Action>();
for(int i = 0; i < 10000; i++)
{
myList.Add(() => { /* Code */});
}

这一次,我指向一个方法。

List<Action> myList = new List<Action>();
for (int i = 0; i < 10000; i++)
{
myList.Add(myFuntion);
}

void myFuntion()...

我想知道第一个代码片段是否使用了更多内存,因为它必须存储匿名方法。还是每次都指向同一个匿名函数

第二个代码片段是指向函数还是每次都存储整个函数

谢谢

最佳答案

我不能肯定地告诉 .NET,但一般来说,这取决于匿名函数是否从投降函数(例如 myList 在您的示例中)捕获任何元素。如果不是,编译器可以将其更改为具有编译器生成的名称的普通静态函数。

如果它捕获了一些东西,那么编译器必须生成并分配一个额外的数据结构来存储捕获的变量,并将其用作编译器生成函数的参数。例如。如果你这样做 myList.Add(() => { var z = myList.Count; .... }); 编译器需要为它生成这样的东西:

class GenertedEnv
{
public List<Action> myList;
}

static void AnonymousFunction(GeneratedEnv env, /* Plus other lambda parameters*/)
{
var z = env.myList.Count;
...
}

关于c# - 匿名函数在循环中占用更多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125988/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com