對於我需要高速計算的新項目,我試圖在C++和C#之間進行選擇。我一直聽說C#在速度上是合理的。我知道C和C++比較慢,但我的例外是差別不大!所以我用C++和C#編寫了兩個代碼來自己測試它們。C++和C#速度測試 - 奇怪的結果
C++的結果大約是5:09到5:55秒,而C#的結果是11408到11960秒。
因此,我的代碼有問題,或者這是真的嗎? 這裏是我的C++代碼:
clock_t tStart = clock();
std::ofstream myfile;
myfile.open("log.txt");
std::string pi;
int limit = 50;
for (int i = 0; i < limit; i++)
{
for (int j = 0; j < limit; j++)
{
for (int k = 0; k < limit; k++)
{
double val = sin(i *i + j *j + k *k);
pi = std::to_string(val);
myfile << pi<<"\n";
}
}
}
myfile.close();
printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
getchar();
return 0;
,這裏是我的C#代碼:
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
string path = @"c:\log.txt";
int limit = 50;
for (int i = 0; i < limit; i++)
{
for (int j = 0; j < limit; j++)
{
for (int k = 0; k < limit; k++)
{
double val = Math.Sin(i *i + j *j + k *k);
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(val.ToString("F6"));
}
}
}
}
stopwatch.Stop();
Console.Write(stopwatch.ElapsedMilliseconds);
Console.ReadKey(true);
我的操作系統是64位的Win7。 預先感謝您的時間。
@EDIT:爲什麼要改變 double val = Math.Sin(i * i + j * j + k * k); 至 double val = Math.Sin(i^2 + j^2 + k^2);在C#中使用 ,會產生完全不同的答案?
請注意,您在循環內部打開文件 - 在你的C++版本不同。 –
哇,是的,你是對的。我改變了這一點,現在C#的結果是** 44毫秒**這是令人難以置信的。那麼C++現在有什麼問題? – NESHOM
@ M0HS3N你確定你正在編譯啓用優化嗎? – user657267