下面是一个简单的问题。Reflection.Emit Performance
比方说,我们要展开一个循环的方法,如:
public int DoSum1(int n)
{
int result = 0;
for(int i = 1;i <= n; i++)
{
result += i;
}
return result;
}
到一个方法只能进行简单的加法:
public int DoSum2()
{
return 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20;
}
从逻辑上讲,我们要在某些时候需要代码在IL中创建DoSum2
。 在这个IL代码中,我们将使用与未优化方法相同的迭代计数来执行实际循环。
什么,如果所需的代码生成将使用类似的时间来执行量创造一个超快速的动态方法的点???
或许你可以举个例子,当它在一点,实在值得类似情况下使用的Emit?
“这不是真的专用于Reflection.Emit”: 正确的,我可以使用CodeDom,而不是慢。 我想整个想法是,这样的性能优化是为了再次使用相同的生成装配。 ...在我的例子中,该方法不可重复使用。 “ ”“POCO”类与优化的字段布局“: 我想知道如果你正在谈论在MSIL中使用较短的地址?否则请解释。 您提到的关于序列化的例子非常有趣。事实上,你将不得不运行大量的条件反射代码。 – Olograph 2014-09-04 21:23:02
关于我的POCO评论,我的意思是,如果底层数据存储在适当类型的字段中,而不是稀疏映射/字典,则封装更紧凑。运行时可以安排这些字段以消除不必要的填充,并且最终不会像使用散列表中的未使用的插槽(更不用说不必要的填充值)。 – 2014-09-05 13:33:55
好点,谢谢! – Olograph 2014-09-06 21:31:59