系统相关
首页 > 系统相关> > 匿名函数是否在循环中占用更多内存

匿名函数是否在循环中占用更多内存

作者:互联网

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

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;
    ...
}

标签:anonymous-function,c
来源: https://codeday.me/bug/20191026/1937710.html