C#とC++の速度を比べてみました!

こんにちは!

今回はちょっとしたお試し程度にC#とC++の速度を比べてみました。

予想とは少し違う結果が出たので勉強する必要がありそうです・・

というか他の方も試してるみたいである意味その結果に近くなってる気がします。

※これは個人によるただの実験で正式な検証結果等ではありません

結論付けるのはまだ早くさらなる検証が必要ですのでご注意ください

まずは結果から!

こちらがC++の結果になります。単位はC++もC#もミリ秒です。

画像1

こちらは2130ミリ秒~2146ミリ秒で平均が2131ミリ秒みたいですね

そしてお次はC#

画像2

こちらは2072ミリ秒~2287ミリ秒で平均は2103ミリ秒

最初が処理時間かかってあとはC++よりもちょっと早いみたいです。

C++のほうが速いと思ってたのでびっくりですが、

実験前にC#のほうが速いときもあるという記事読んだので

ある意味想定内なのかもしれません・・

お次はソースコード!

まずはC++からです。

#include <iostream>
#include <sstream>;
#include <time.h>

//時間がかかる処理
double Timer() 
{
        //タイマースタート
	clock_t start = clock();
	int test = 0;
        //10万回×1万回処理を繰り返す
	for (int i = 0; i < 100000; i++)
	{
		for (int j = 0; j < 10000; j++)
		{
			test = j;
		}
	}

        //タイマーストップして処理結果を返す
	clock_t end = clock();
	double time = static_cast<double>(end - start) / CLOCKS_PER_SEC * 1000.0;
	return time;
}

int main()
{
        //処理を10回繰り返す
	double SumTime = 0;
	for (int i = 1; i <= 10; i++)
	{
                Timer関数から処理結果を受け取る
		double time = Timer();
                //処理結果の出力と時間を合計していく
		std::string str = std::to_string(i) + "回目タイム";
		std::cout << str << time << std::endl;
		SumTime += time;
	}

        //合計タイムと平均タイムを表示
	std::cout << "合計タイム" << SumTime << std::endl;
	std::cout << "平均タイム" << SumTime / 10 << std::endl;

	std::string str;
	std::cin >> str;
}

次はC#のソースコードです。

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

namespace Console
{
   class Program
   {
       static double Timer()
       {
           //タイマースタート
           Stopwatch st = new Stopwatch();
           st.Start();
           int test = 0;
           //10万回×1万回処理を繰り返す。
           for (int i = 0; i < 100000; i++)
           {
               for (int j = 0; j < 10000; j++)
               {
                   test = j;
               }
           }

            //タイマーストップして処理結果を返す
           st.Stop();
           return st.ElapsedMilliseconds;
       }

       static void Main(string[] args)
       {
           //処理を10回繰り返す
           double SumTime = 0;
           for (int i = 1; i <= 10; i++)
           {
               //Timerメソッドから時間を取得する
               double time = Timer();
               //処理結果の出力と時間を合計していく
               string str = i.ToString() + "回目タイム";
               System.Console.WriteLine(str + time);
               SumTime += time;
           }
           
           //合計タイムと平均タイムを表示
           System.Console.WriteLine("合計タイム" + SumTime);
           System.Console.WriteLine("平均タイム" + SumTime / 10);
           System.Console.ReadLine();
       }
   }
}

C++は現在勉強中なのもあり処理が遅くなる

書き方をしてる可能性がありますのでご注意ください。

今回のまとめ

C#とC++ですが、場合によってはC#のほうが

速くなる可能性があるという結果になりました。

ただし完全に同じ環境でソースコードも精錬されたものを使ったかというと

そうではない点に注意する必要があるかと思います。

また、大容量データについてはC++のほうが圧倒的に早いなど

情報があるので使い分けが重要なのかもしれません

C++とC#の勉強しなおしてもう1度同じ検証

そして次は複雑な処理の検証するのも面白そうです。


もしよろしければサポートお願いいたします。 頂いたサポートは今後の活動費として使わせていただきます。