比较有趣的编译问题.有兴趣进来看看
kirc 2005-06-16 07:57:15 最近做的东西对性能要求很高,反复的测试.
今天偶然发现一个东西,可能高手都已经知道了,不过贴出来给新手看看吧.
本来想把代码中的foreach替换成for来提高性能,但看了一眼编译后的结果..结果感觉没必要了.
原始的一小段代码:
int[] counter = new int[this._multiKeyWords.Length];
for(int i=0; i<findKeyCounter; i++)
{
foreach(int mwordid in _multiWordMap[findKeyWordQueue[i]])
{
counter[mwordid] ++;
}
}
然后编译了一下,再用Reflector反编译了一下,再看:
int[] numArray3 = new int[this._multiKeyWords.Length];
for (int num8 = 0; num8 < num3; num8++)
{
int[] numArray5 = this._multiWordMap[numArray2[num8]];
for (int num12 = 0; num12 < numArray5.Length; num12++)
{
int[] numArray6;
IntPtr ptr1;
int num9 = numArray5[num12];
(numArray6 = numArray3)[(int) (ptr1 = (IntPtr) num9)] = numArray6[(int) ptr1] + 1;
}
}
原来编译器会自动把foreach变成for循环.
关键是下面那句话,为什么写成这样,我是不太清楚编译的原理.(或者是Reflector反编译造成的结果)高手可以谈谈自己的看法.