soma de números primos ainda lenta após o uso da peneira

Eu experimentei um desafio de codificação de euler do projeto abaixo, a resposta dada pelo código está correta, mas não entendo por que está demorando quase um minuto para ser executado. Estava terminando em tempos semelhantes antes de usar uma peneira. Outros usuários estão reportando tempos tão baixos quanto milissegundos.

Suponho que estou cometendo um erro básico em algum lugar ...

   // The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
   // Find the sum of all the primes below two million.
   public static long Ex010()
   {
      var sum = 0L;
      var sieve = new bool[2000000];
      var primes = new List<int>(10000);

      for (int i = 2; i < sieve.Length; i++)
      {
         if (sieve[i-1])
            continue;

         var isPrime = true;
         foreach (var prime in primes)
         {
            if (i % prime == 0) {
               isPrime = false;
               break;
            }
         }

         if (isPrime) {
            primes.Add(i);
            sum += i;

            for (var x = i * 2; x < sieve.Length; x += i) {
                  sieve[x-1] = true;
            }
         }
      }

      return sum;
   }
EDITAR:

A única coisa que parecia falta era essa otimização:

        if (prime > Math.Sqrt(i))
            break;

Reduz o tempo para 160 ms.

EDIT 2:

Por fim, clicado, retirou o foreach, como foi sugerido várias vezes. São agora 12 ms. Solução final :

   public static long Ex010()
   {
      var sum = 0L;
      var sieve = new bool[2000000];

      for (int i = 2; i < sieve.Length; i++)
      {
         if (sieve[i-1])
            continue;

         sum += i;

         for (var x = i * 2; x < sieve.Length; x += i) {
            sieve[x-1] = true;
         }
      }

      return sum;
   }

questionAnswers(2)

yourAnswerToTheQuestion