在过去的几个月里,我一直在运行一个处理器密集型程序,我用C#编写了这个程序,名为Zeros6。
到目前为止,大约经过的时间是157天,总处理器时间是1 217天。计算机的一些细节: Intel Core i7 2600 / 3.4 GHz /4核+超线程-> 8处理器。
我使用2010和.NET框架的第4版编写了这个程序(我认为)。
无论如何,今天我决定安装2012。安装程序安装了.NET框架的4.5版本,然后请求重新启动以继续安装。我停止了Zeros6程序,OKed重新启动。在重新启动之后,Zeros6像往常一样自动重新启动,Visual安装继续进行,很快就完成了。然后,我震惊地发现,Zeros6的运行速度比通常运行的要快得多。一个速度指示器,通常是相当稳定的5.5 (每位数皮秒)下降到2.0 -我从未见过它低于5.34。然后我停止并启动了几次程序,并重新启动了计算机,但速度的提高仍在继续。如果我们称旧速度为100%,则新速度为275%!
我很想知道发生了什么事。
一些声明..。
uint[] digits;
uint startI;
uint stopI;
public static readonly int bigPowerIncrement = 34;
public static readonly uint myBase = 1000000000; 所有8个处理器大部分时间都在做这个.
{
ulong carry = 0;
unchecked
{
for (uint i = startI; i < stopI; i++)
{
ulong m = ((ulong)digits[i] << bigPowerIncrement) | carry;
carry = m/myBase;
if ((digits[i] = (uint)(m - myBase*carry)) < 1000000)
{ // do this about one time in 1000...
h.specials[h.specialCount++] = i;
}
} // i loop
} // unchecked
h.carry = carry;
}发布于 2012-09-17 23:09:37
很难确切地知道什么改进了,但是.NET 4.5中有相当多的改进。由于这是对.NET 4的就地升级,您将从这些改进中获益。
h.specialsh.specialCount++ = i;
例如,如果h.specials是一个ConcurrentDictionary<T,U>,那么这本身就可能是一个改进。ConcurrentDictionary<T,U>类型在.NET 4.5中得到了显著改善。
它也可以是一个新的或改变了的JIT优化,它现在正在使您受益,这是以前没有的,或者是许多其他事情。
https://stackoverflow.com/questions/12468267
复制相似问题