public void ForEachBench() { var count = 50_000_000; var arr = new int[count]; IList arrO = arr; var vecT = new Vec <int>(arr); var vec = new Vec(arr); var mem = (Memory <int>)arr; var list = new List <int>(arr); //for (int i = 0; i < count; i++) //{ // vecT[i] = i; // //if ((int)vec[i] != vecT[i]) // //{ // // throw new Exception("(int)vec[i] != vecT[i]"); // //} //} long sum = 0; var rounds = 20; var mult = 10; for (int r = 0; r < rounds; r++) { //using (Benchmark.Run("Array", count * mult)) //{ // var z = count - 1; // for (int m = 0; m < mult; m++) // { // for (int j = 1; j < z; j++) // { // sum += arr[j - 1]; // } // } //} //using (Benchmark.Run("ArrayO", count * mult)) //{ // var z = count - 1; // for (int m = 0; m < mult; m++) // { // for (int j = 1; j < z; j++) // { // sum += (int)arrO[j - 1]; // } // } //} //using (Benchmark.Run("ArrayNoBC", count * mult)) //{ // var z = count - 1; // for (int m = 0; m < mult; m++) // { // for (int j = 1; j < arr.Length; j++) // { // sum += arr[j] + 1; // } // } //} //using (Benchmark.Run("List", count * mult)) //{ // var z = count - 1; // for (int m = 0; m < mult; m++) // { // for (int j = 1; j < z; j++) // { // sum += list[j - 1]; // } // } //} //using (Benchmark.Run("VecT", count * mult)) //{ // for (int m = 0; m < mult; m++) // { // var z = count - 1; // for (int j = 1; j < z; j++) // { // sum += vecT.DangerousGet(j - 1); // } // } //} //using (Benchmark.Run("Span", count * mult)) //{ // for (int m = 0; m < mult; m++) // { // var z = count - 1; // var sp = vecT.Span; // for (int j = 1; j < z; j++) // { // sum += sp[j - 1]; // } // } //} using (Benchmark.Run("Vec.Get<T>", count * mult)) { for (int m = 0; m < mult; m++) { for (int j = 0; j < count; j++) { sum += vec.DangerousGet <int>(j); } } } //using (Benchmark.Run("Vec", count * mult)) //{ // for (int m = 0; m < mult; m++) // { // for (int j = 0; j < count; j++) // { // sum += (int)vec.DangerousGet(j); // } // } //} //using (Benchmark.Run("Memory<T>.Span", count * mult)) //{ // for (int m = 0; m < mult; m++) // { // for (int j = 0; j < count; j++) // { // sum += (int)mem.Span[j]; // } // } //} } Benchmark.Dump(); Console.WriteLine(sum); }