Я написал простой тест, который создает переменную, инициализирует ее нулем и увеличивает 100000000 раз.
С++ делает это за 0,36 с. Оригинальная версия С# в 0.33s Новая в 0.8s F # за 12 секунд.
Я не использую никаких функций, поэтому по умолчанию не проблема с дженериками
F # code
open System
open System.Diagnostics
// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.
[<EntryPoint>]
let main argv =
let N = 100000000
let mutable x = 0
let watch = new Stopwatch();
watch.Start();
for i in seq{1..N} do
x <- (x+1)
printfn "%A" x
printfn "%A" watch.Elapsed
Console.ReadLine()
|> ignore
0 // return an integer exit code
Код С++
#include<stdio.h>
#include<string.h>
#include<vector>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
const int N = 100000000;
int x = 0;
double start = clock();
for(int i=0;i<N;++i)
{
x = x + 1;
}
printf("%d\n",x);
printf("%.4lf\n",(clock() - start)/CLOCKS_PER_SEC);
return 0;
}
Код С#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace SpeedTestCSharp
{
class Program
{
static void Main(string[] args)
{
const int N = 100000000;
int x = 0;
Stopwatch watch = new Stopwatch();
watch.Start();
foreach(int i in Enumerable.Range(0,N))
//Originally it was for(int i=0;i<N;++i)
{
x = x + 1;
}
Console.WriteLine(x);
Console.WriteLine(watch.Elapsed);
Console.ReadLine();
}
}
}
Edit
Замена for (int i = 0; i < N; ++i)
на foreach(int i in Enumerable.Range(0,N))
заставляет программу С# работать примерно в 0.8 с, но она все еще намного быстрее, чем f #
Edit
Замените DateTime
на StopWatch
для F #/С#. Результаты те же