0

これが私が抱えている問題です。私はサーバーとラップトップを持っています。両方のコンピューターで何も実行されていません。

プログラムは次のとおりです。

    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 );
        }
    }

私のラップトップでは、約 650 ミリ秒で一貫したパフォーマンスが得られます。サーバー上で私はクレイジーなスイングをします。595 から 1500 ミリ秒までの任意の値。ここでも、両方のコンピューターで何も実行されていません。プログラムは非常にシンプルで、RAM も使用しません。おそらく登録するだけです。

何が原因でしょうか? サーバーとラップトップを passmark.com ベンチマークでテストしたところ、すべて正常に見えました。

サーバーの仕様は次のとおりです。Windows 2012 x64 cpu: xeon e5-1620 @ 3.6

ラップトップの仕様は次のとおりです。Windows 7 x64 CPU: i7-2620M @ 2.7

Windows 7 i7-2620M スクリーンショット

Windows 2012 xeon e5-1260 スクリーンショット

4

2 に答える 2

2

特により高度なシステムでは、パフォーマンスの測定Stopwatchはあまり正確ではありません。高度なハードウェアでは、コア間の移行、プロセスとスレッドの優先度、キャッシュなど、通常はプログラムの直接制御下にないものにタイミングが大きく依存するためです。アフィニティ、さまざまな CPU パイプラインの状態など。

ストップウォッチを開始する前に、これらの指示 (ここから) を追加してみてください。

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

これにより、特にマルチコア、マルチ CPU ボックスで、測定の一貫性が向上します。

于 2013-10-05T12:29:54.270 に答える
0

Windows デスクトップはフォアグラウンド プロセスにより高い優先度を割り当てますが、Windows サーバーはバックグラウンド プロセスにより高い優先度を割り当てます。これは、あなたが経験している違いに貢献します。

于 2013-10-05T12:38:01.887 に答える