简单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