C#がC ++よりも高速に実行されるのはなぜですか?

plkana

冗談じゃない。C#アプリケーションとC ++アプリケーションがあります。彼らはまったく同じことを、まったく同じ量のコードで行います...

...そして、C#のものは、高速であるだけでなく、10倍高速で実行されています。

これは奇妙なことに私を驚かせました。なぜなら、私はデバッガーでC#アプリを実行していたため、そもそもC#の速度が低下するはずだからです。次に、その理由から、C#は、多数の追加機能を備えたMSILにコンパイルされた.NETを使用した大きなオーバーヘッドを伴うバイトコードであるため、速度が低下するはずです。C ++は純粋なマシンコードですが。

C#コードは次のとおりです。

static void main()
{
    ulong i = 0;
    while (i < 100000000000)
    {
        Console.WriteLine(i);
        i++;
    }
}

これはC ++コードでしたが

int main()
{
    usigned long i = 0;
    while (i < 100000000000)
    {
        cout << i << endl;
        i++;
    }
    return 0;
}

彼らはただ数を数えて表示しているだけです。C ++のものは1000になり、C#のものは7000になります。(7倍高速)

私はそれらの両方をコンパイルし、コマンドプロンプトでコマンドプロンプトを使用してデバッガなしで実行しようとしました:cplusplus.exe && csharp.exe

ええ、私は多分この質問が「オフトピック」であることを知っています:Pまたは多分それは「何が求められているのか明確ではない」です。:/しかし、誰かが私にこれを説明してください。

これが重要な場合、私はこのCPUを使用しています:Intel i72.5Ghz。

編集:私はcout << i << "\ n"; アイデアに加えて、std :: ios_base :: sync_with_stdio(false); 運や結果の変化なしにアイデア。

編集2:私はCのprintf()を試しましたが、はるかに高速でした。C#より3倍高速です。

IOストリームは非常に遅いと言われたので、コンソールに書き込まずに両方を試しましたが、C ++はC#よりもはるかに高速でした。

結論として、Writeline()はcoutよりもはるかに高速であり、printf()は両方よりもはるかに高速です。したがって、コンソールへの書き込みだけがコンソールの速度を低下させます。

TLDR:printf()が優先され、コンソールの書き込みが遅くなります。

トニー・デルロイ

あなたはあなたの評価に十分注意を払っていなかったと思います。以下に詳述するように、C ++でテストを再作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSScratch
{
    class Program
    {
        static void Main(string[] args)
        {
            ulong i = 0;
            while (i < 1000000)
            {
                Console.WriteLine(i);
                i++;
            }
        }
    }
}

上記をVS2013リリースモードでCSScratch.exeにビルドし、ファイルシステムの書き込み時間がカウントされないように出力をリダイレクトして(cygwin bashで)時間を計測しました。結果はかなり一貫しており、5回の実行の中で最も速いものは次のとおりです。

time ./CSScratch.exe > NUL

real    0m17.175s
user    0m0.031s
sys     0m0.124s

C ++の同等物:

#include <iostream>

int main()
{
    std::ios_base::sync_with_stdio(false);


    unsigned long i = 0;
    while (i < 1000000)
    {
        std::cout << i << '\n';
        i++;
    }
}

また、VS2013でコンパイルされています:

cl /EHsc /O2 output.cc
time ./output > NUL

5回の実行の中で最も遅いもの

real    0m1.116s
user    0m0.000s
sys     0m0.109s

これは、C#の最速の実行(17.175秒)よりもさらに高速(1.116秒)です。

両方のバージョンの時間の一部は、ロード/ダイナミックリンク、初期化などにかかります。C++バージョンを10倍以上ループするように変更しましたが、それでも9.327秒しかかかりませんでした。これはC#がワークロードの10分の1に必要な時間の約半分です。

(より大きな出力バッファーを設定することでC ++バージョンをさらに調整できますが、通常は必要ありません)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ここでJavaがCよりも高速に実行されるのはなぜですか?

分類Dev

test1()がtest2()よりもはるかに高速に実行されるのはなぜですか?

分類Dev

この操作がGPUよりもCPUで高速に実行されるのはなぜですか?

分類Dev

このコードでCPUがGPUよりも高速に実行されるのはなぜですか?

分類Dev

scipy線形補間が最近隣補間よりも高速に実行されるのはなぜですか?

分類Dev

collections.Counterがソースコードを直接実行するよりも高速に実行されるのはなぜですか

分類Dev

Python印刷がGoのfmt.Printおよびos.Stdout.Writeよりも高速に実行されるのはなぜですか

分類Dev

EclipseのPyDevPythonコンソールよりもEclipseコンソールの方がコードが高速に実行されるのはなぜですか?

分類Dev

バイトコードがネイティブコードよりも高速に実行される可能性があるのはなぜですか

分類Dev

代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

分類Dev

setImmediate()がシーケンシャルコードよりも高速に実行されるのはなぜですか?

分類Dev

C#での計算がPythonよりもはるかに高速なのはなぜですか

分類Dev

Pythonがmain()関数を介して独自の関数を実行するC ++よりも高速にC ++関数を実行するのはなぜですか?

分類Dev

GPUがCPUよりも高速に行列乗算を実行できるのはなぜですか?

分類Dev

コードが想定よりもはるかに多く実行されるのはなぜですか?

分類Dev

コードのこの部分が他の部分よりも先に実行されるのはなぜですか?

分類Dev

この単純なループの実行において、PHP7がPython3よりもはるかに高速なのはなぜですか?

分類Dev

pandas.grouby.meanが並列実装よりもはるかに高速なのはなぜですか

分類Dev

ロギングライブラリによってパフォーマンステストがより高速に実行されるのはなぜですか?

分類Dev

ストリームを使用するこのコードがJava 9でJava 8よりもはるかに高速に実行されるのはなぜですか?

分類Dev

配列がArrayListよりもはるかに高速なのはなぜですか?

分類Dev

any()がinよりもはるかに高速なのはなぜですか?

分類Dev

PythonのこのコードがC ++よりもはるかに高速なのはなぜですか?

分類Dev

2番目のコードセグメントが最初のコードセグメントよりもはるかに高速に実行されるのはなぜですか?

分類Dev

C#:これは、インラインコードよりも、複数の関数でどのように高速に実行されますか?

分類Dev

「for」ループがループの本体よりも1回多く実行されるのはなぜですか?

分類Dev

厳密な長さの関数が著しく高速に実行されるのはなぜですか?

分類Dev

非同期コードが同期よりもはるかに高速であると見なされるのはなぜですか?

分類Dev

DEBUGトラップが予想よりも多く実行されるのはなぜですか?

Related 関連記事

  1. 1

    ここでJavaがCよりも高速に実行されるのはなぜですか?

  2. 2

    test1()がtest2()よりもはるかに高速に実行されるのはなぜですか?

  3. 3

    この操作がGPUよりもCPUで高速に実行されるのはなぜですか?

  4. 4

    このコードでCPUがGPUよりも高速に実行されるのはなぜですか?

  5. 5

    scipy線形補間が最近隣補間よりも高速に実行されるのはなぜですか?

  6. 6

    collections.Counterがソースコードを直接実行するよりも高速に実行されるのはなぜですか

  7. 7

    Python印刷がGoのfmt.Printおよびos.Stdout.Writeよりも高速に実行されるのはなぜですか

  8. 8

    EclipseのPyDevPythonコンソールよりもEclipseコンソールの方がコードが高速に実行されるのはなぜですか?

  9. 9

    バイトコードがネイティブコードよりも高速に実行される可能性があるのはなぜですか

  10. 10

    代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

  11. 11

    setImmediate()がシーケンシャルコードよりも高速に実行されるのはなぜですか?

  12. 12

    C#での計算がPythonよりもはるかに高速なのはなぜですか

  13. 13

    Pythonがmain()関数を介して独自の関数を実行するC ++よりも高速にC ++関数を実行するのはなぜですか?

  14. 14

    GPUがCPUよりも高速に行列乗算を実行できるのはなぜですか?

  15. 15

    コードが想定よりもはるかに多く実行されるのはなぜですか?

  16. 16

    コードのこの部分が他の部分よりも先に実行されるのはなぜですか?

  17. 17

    この単純なループの実行において、PHP7がPython3よりもはるかに高速なのはなぜですか?

  18. 18

    pandas.grouby.meanが並列実装よりもはるかに高速なのはなぜですか

  19. 19

    ロギングライブラリによってパフォーマンステストがより高速に実行されるのはなぜですか?

  20. 20

    ストリームを使用するこのコードがJava 9でJava 8よりもはるかに高速に実行されるのはなぜですか?

  21. 21

    配列がArrayListよりもはるかに高速なのはなぜですか?

  22. 22

    any()がinよりもはるかに高速なのはなぜですか?

  23. 23

    PythonのこのコードがC ++よりもはるかに高速なのはなぜですか?

  24. 24

    2番目のコードセグメントが最初のコードセグメントよりもはるかに高速に実行されるのはなぜですか?

  25. 25

    C#:これは、インラインコードよりも、複数の関数でどのように高速に実行されますか?

  26. 26

    「for」ループがループの本体よりも1回多く実行されるのはなぜですか?

  27. 27

    厳密な長さの関数が著しく高速に実行されるのはなぜですか?

  28. 28

    非同期コードが同期よりもはるかに高速であると見なされるのはなぜですか?

  29. 29

    DEBUGトラップが予想よりも多く実行されるのはなぜですか?

ホットタグ

アーカイブ