Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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
简单2行程序的CPU性能不一致。C#.NET 4.0_C#_.net_Performance_Cpu - Fatal编程技术网

简单2行程序的CPU性能不一致。C#.NET 4.0

简单2行程序的CPU性能不一致。C#.NET 4.0,c#,.net,performance,cpu,C#,.net,Performance,Cpu,我有个问题。我有一台服务器和一台笔记本电脑。两台计算机上都没有运行任何程序 节目如下: static void Main( string[] args ) { Stopwatch w = new Stopwatch(); while( true ) { w.Restart(); for( int i = 0; i < int.MaxValue; i++ )

我有个问题。我有一台服务器和一台笔记本电脑。两台计算机上都没有运行任何程序

节目如下:

    static void Main( string[] args )
    {
        Stopwatch w = new Stopwatch();
        while( true )
        {
            w.Restart();
            for( int i = 0; i < int.MaxValue; i++ )
                ;

            w.Stop();

            System.Console.WriteLine( w.ElapsedMilliseconds );
        }
    }
static void Main(字符串[]args)
{
秒表w=新秒表();
while(true)
{
w、 重启();
对于(int i=0;i
在我的笔记本电脑上,我的性能稳定在650毫秒左右。在服务器上我得到疯狂的摆动。595到1500毫秒之间的任何时间。同样,两台计算机上都没有运行任何东西。这个程序非常简单,甚至不使用RAM。可能只是注册而已

这是什么原因造成的?我用passmark.com基准测试了服务器和笔记本电脑,一切正常

以下是服务器的规格: windows 2012 x64 cpu:xeon e5-1620@3.6

以下是笔记本电脑的规格: windows 7 x64 cpu:i7-2620M@2.7


使用秒表测量性能不太精确,尤其是在更高级的系统上,因为在高级硬件上,计时在很大程度上取决于通常不受程序直接控制的事情,例如核心之间的迁移、进程和线程的优先级、缓存关联性、,各种CPU管道的状态,等等

在启动秒表之前,请尝试添加以下说明()

Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(2);
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
Thread.CurrentThread.Priority = ThreadPriority.Highest;

这将使测量更加一致,尤其是在多核、多cpu的机箱上。

Windows桌面将更高的优先级赋予前台进程,而Windows服务器将更高的优先级赋予后台进程。这将导致您所经历的差异。

这里有太多的变量,我们无法给您一个可靠的答案。。我想,只是用C++编写了同样的程序,结果也一样。服务器上的差异很大。可能是CPU设置的问题吗?有什么方法可以诊断吗?省电设置或其他什么?我开始这项研究的原因是,IIS在响应时间上给了我惊人的差异,对于同一个只在内存中进行的简单请求处理。所以它也发生在后台进程上。在C++中用相同的结果编写了相同的程序。服务器上的差异很大。这可能是CPU设置吗?秒表应该使用QueryPerformanceCounter。所以它应该相当准确。ProcessorAffinity似乎起到了作用。所以在这种情况下,它确实执行得更快,因为它不交换核心。我想知道是否有一种方法可以告诉它只在一个内核上,而不指定特定的内核就不能切换?@user2796794您可以使用
GetCurrentProcessorNumber
from,并将affinity设置为
IntPtr(1