匿名函数是否在循环中占用更多内存
作者:互联网
我在想.以下代码段是否消耗比第二个更多的内存
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