I have written this simple bruteforce algorithm that finds max sum of subsequence in some sequence, both in C# and D. And when the size of array is 1000000 elements - D is 20 seconds lated. Why?

D code (algorithm):

'

public int solveBruteForce()

{

int currMax = arr[0], currSum;

foreach (_; arr)

{

currSum = 0;

foreach (int el; arr)

{

currSum += el;

currMax = max(currSum, currMax);

}

}

```
return currMax;
}
```

'

D code (measuring exec time):

'

double measureTime()

{

StopWatch sw;

sw.start();

solveDynamic();

double sec = (to!double(sw.peek.total!"msecs") / 1000) + (to!double(sw.peek.total!"usecs") / 1000000);

return sec;

}

'

C# code (alg):

'

int EachOther(int[] array)

{

int current_max = array[0];

for (int i = 0; i < array.Length; i++)

{

int subset_sum = 0;

for (int j = i; j < array.Length; j++)

{

subset_sum += array[j];

current_max = Math.Max(subset_sum, current_max);

}

}

return current_max;

}

'

C# code (time measuring):

'

Stopwatch stopwatch = new Stopwatch();

for (int cur_size = 1000; cur_size <= size_max; cur_size *= 10)

{

int[] array = GenArray(cur_size);

stopwatch.Start();

EachOther(array);

stopwatch.Stop();

double time = (double)stopwatch.ElapsedTicks / Stopwatch.Frequency;

Console.Write("{0, -10}|", string.Format("{0:f7}", time));

}

Console.WriteLine();

'