C# .NET Framework 4.5上的意外加速
在过去的几个月里,我一直在运行一个处理器密集型系统 我用C#写的程序,叫做Zeros6 到目前为止,经过的时间大约为157天,总共 处理器时间为1217天。[计算机的一些细节:英特尔 Core i7 2600/3.4 GHz/4核+超线程->8个处理器。] 我使用Visual Studio Express 2010和的版本4编写了该程序 NET框架(我认为) 无论如何,今天我决定安装Visual Studio Express 2012。这个 安装程序安装了.NET Framework的4.5版,然后 请求重新启动以继续安装。我停了零号 程序,并取消了重新启动。重新启动后,Zeros6重新启动 照常自动进行,Visual Studio安装继续进行 很快就完成了。然后我震惊地发现Zeros6是 跑得比平时快得多。速度指示器 通常相当稳定的5.5(皮秒/位数)下降到 2.0-我从未见过它低于5.34。然后我停下来,开始了 程序运行了几次,然后重新启动计算机,但是 速度继续提高。如果我们称旧的速度为100%, 新的速度是275%C# .NET Framework 4.5上的意外加速,c#,.net,C#,.net,在过去的几个月里,我一直在运行一个处理器密集型系统 我用C#写的程序,叫做Zeros6 到目前为止,经过的时间大约为157天,总共 处理器时间为1217天。[计算机的一些细节:英特尔 Core i7 2600/3.4 GHz/4核+超线程->8个处理器。] 我使用Visual Studio Express 2010和的版本4编写了该程序 NET框架(我认为) 无论如何,今天我决定安装Visual Studio Express 2012。这个 安装程序安装了.NET Framework的4.5版,
我很想知道发生了什么事 一些声明
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;
}
{
ulong进位=0;
未经检查
{
对于(uint i=startI;i
h、 特例[h.specialCount++]=i
例如,如果h.specials
是一个ConcurrentDictionary
,那么这本身就是一个改进。ConcurrentDictionary
类型在.NET 4.5中得到了显著改进
它也可能只是一个新的或改变了的JIT优化,使您受益,这是以前没有的,或者是许多其他的事情。我很想知道发生了什么。"-他们改进了一些…一些锁定机制得到了改进…我不知道您的代码是否涉及到任何并行功能,但另一个是关于性能改进的。只有当我们看到特辑
和h
时,才能找到更好的答案。您知道我在哪里可以找到有关性能改进的详细信息吗ConcurrentDictionary?这里有一些关于改进的信息,COM互操作也有巨大的改进,所以如果这里有任何东西在使用COM,那也可以。。。