Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Framework 4.5上的意外加速_C#_.net - Fatal编程技术网

C# .NET Framework 4.5上的意外加速

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版,

在过去的几个月里,我一直在运行一个处理器密集型系统 我用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%


我很想知道发生了什么事

一些声明

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,那也可以。。。