1

円周率を計算するメソッドがあります。C#5 の async/await 機能を使用してこれを高速化できるかどうか疑問に思っていました。

public decimal CalculatePi(int measure)
        {
            var target = measure;
            decimal current = 3;
            var incrementing = false;
            var inner = (decimal)1.0;
            while (current < target)
            {
                if (!incrementing)
                {
                    inner = inner - (1/current);
                    current += 2;
                    incrementing = true;
                }
                if (incrementing)
                {
                    inner = inner + (1/current);
                    current += 2;
                    incrementing = false;
                }

            }
            return 4*inner;
        }
4

2 に答える 2

4

async と await は、ネットワークやハード ドライブなど、必要以上に速度が遅い他のリソースにアクセスする場合に最適です。このような純粋なプロセッサ コードで使用すると、スレッドを開始するのと同じように、コードが残りのコード (このメソッドを開始した元の呼び出しコード) とプロセッサを共有するだけになります。他のコードが処理を続行することによって速度が低下するか、または他のコードのヒットが待機して、あたかも同期しているかのように続行します。async/await を使用しても大きなメリットはありません。

于 2012-08-31T13:54:27.927 に答える
2

PI 自体の計算が正しいかどうかはわかりませんが、あなたのアルゴリズムはマルチスレッドには適していません。

実際、あなたのアルゴリズムは逐次的で、非常に小さなコードです。コンテキストの切り替えにより、多くのオーバーヘッドが追加され、メリットが失われます。

于 2012-08-31T13:56:49.587 に答える