私は、C ++とC#の速度の違いは、主にC#がJITコンパイラーによって取り込まれるバイトコードにコンパイルされること(それは正しいですか?)とC#が行うすべてのチェックについて考えていました。
unsafeコンパイルオプションと、安全でないコードを共通言語ランタイムで検証できないためにキーワードを使用することの両方で、これらの関数の多くをオフにすることが可能であることに気付きました。
したがって、両方の言語で単純なコンソールアプリケーションを作成し、それが架空のコインを無限に反転させ、10,000回程度の反復ごとに結果を画面に表示した場合、速度の違いはどのくらいになるでしょうか。とてもシンプルなプログラムなので、これを選びました。
これをテストしたいのですが、C ++がわからないか、コンパイルするためのツールがありません。これは私のC#バージョンです:
static void Main(string[] args)
{
unsafe
{
Random rnd = new Random();
int heads = 0, tails = 0;
while (true)
{
if (rnd.NextDouble() > 0.5)
heads++;
else
tails++;
if ((heads + tails) % 1000000 == 0)
Console.WriteLine("Heads: {0} Tails: {1}", heads, tails);
}
}
}
コードのセクションを意図的に「安全でない」コンパイルしたり、オーバーフローチェックなどのコンパイルオプションの一部が有効になっていないDLLにコンパイルしたりするのに十分な違いはありますか?それとも、C ++でセクションをコンパイルすることが有益であるという逆の方向に進みますか?その時も相互運用速度が関係してくると思います。
主観を避けるために、私はこの質問の特定の部分を次のように繰り返します。
- C#には、安全でないコードを使用することでパフォーマンスが向上しますか?
- オーバーフローチェックを無効にするなどのコンパイルオプションはパフォーマンスを向上させ、安全でないコードに影響を与えますか?
- 上記のプログラムはC++で高速ですか、それとも無視できるほど異なりますか?
- C ++などの言語で長時間集中的な数値計算タスクをコンパイルしたり、ボーナスとして/ unsafeを使用したりする価値はありますか?主観的ではありませんが、これを行うことで集中的な操作をより速く完了することができますか?