我目前正在处理一些需要最小内存分配的代码。
我注意到如果我使用一个方法作为参数,编译器会更改代码并创建一个新的Action
,但如果我使用匿名方法,编译器会创建一个委托块。我知道新的Action
会分配内存,但是对于委托,我不太确定它是否会分配内存。当使用委托时,委托会分配内存吗?
我的代码:
bool workfinished = false;
void DoWork()
{
MyMethod(CallBack1Work, ()=>{ workfinished = false;});
}
void MyMethod(Action callback1, Action callback2)
{
}
void CallBack1Work()
{
}
编译器版本:
bool workfinished = false;
void DoWork()
{
MyMethod(new Action( CallBack1Work ), delegate{ workfinished = false;});
}
void MyMethod(Action callback1, Action callback2)
{
}
void CallBack1Work()
{
}
void DoWork_b01()
{
workfinished = false;
}
MyMethod
修改为接受一个Action<ContainingClass>
的参数?这样可以提供更多的缓存选项... - Jon SkeetAction<T>
,但在Release模式下不会。(我使用的是Visual Studio 2015,在64位Windows上运行.NET 4.5.2。) - yoyo