下面是一個簡單的問題。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