Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- /*
- Testing different loops against each other.
- Measured in ticks.
- A tick is 100 nanoseconds.
- Linq Select : 239267
- Linq Sum : 241414
- Linq ForEach : 94188
- ForEach : 85663
- For : 118767
- ForWithNoVariables : 148726
- */
- namespace Test
- {
- public class Program
- {
- const int N_STYLES = 6;
- const int N_TESTS = 100;
- const int N_DOUBLES_PER_TEST = 1000000;
- static String[] STYLE_NAMES = { "Linq Select", "Linq Sum", "Linq ForEach", "ForEach", "For", "ForWithNoVariables" };
- public static void Main(string[] args)
- {
- for (int i = 0; i < N_STYLES; i++)
- times.Add(new List<double>());
- for (int i = 0; i < N_TESTS; i++)
- Test();
- for (int i = 0; i < N_STYLES; i++)
- Console.WriteLine(String.Format("{0,-20}", STYLE_NAMES[i])+": "+String.Format("{0,10}", Math.Round(times[i].Average())));
- Console.ReadLine();
- }
- static List<List<double>> times = new List<List<double>>();
- public static void Test()
- {
- Random r = new Random();
- List<double> list = new List<double>();
- for (int i = 0; i < N_DOUBLES_PER_TEST; i++)
- list.Add(r.NextDouble());
- List<DateTime> timers = new List<DateTime>();
- timers.Add(DateTime.Now);
- LinqSelectStyle(list);
- timers.Add(DateTime.Now);
- LinqSumStyle(list);
- timers.Add(DateTime.Now);
- LinqForEachStyle(list);
- timers.Add(DateTime.Now);
- ForEachStyle(list);
- timers.Add(DateTime.Now);
- ForStyle(list);
- timers.Add(DateTime.Now);
- ForStyleNoVariable(list);
- timers.Add(DateTime.Now);
- for (int i = 0; i < N_STYLES; i++)
- {
- double t = timers[i + 1].Ticks - timers[i].Ticks;
- times[i].Add(t);
- }
- }
- static void LinqSelectStyle(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- avg = list.Average();
- sum = list.Select(v => (v - avg) * (v - avg)).Sum();
- }
- static void LinqSumStyle(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- avg = list.Average();
- sum = list.Sum(v => (v - avg) * (v - avg));
- }
- static void LinqForEachStyle(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- list.ForEach(delegate (double v) { avg += v; }); avg /= list.Count;
- list.ForEach(delegate (double v) { sum += (v - avg) * (v - avg); });
- }
- static void ForEachStyle(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- foreach (double v in list)
- avg += v;
- avg /= list.Count;
- foreach (double v in list)
- sum += (v - avg) * (v - avg);
- }
- static void ForStyle(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- for (int i = 0; i < list.Count; i++)
- {
- double v = list[i];
- avg += v;
- }
- avg /= list.Count;
- for (int i = 0; i < list.Count; i++)
- {
- double v = list[i];
- sum += (v - avg) * (v - avg);
- }
- }
- static void ForStyleNoVariable(List<double> list)
- {
- double avg, sum;
- avg = sum = 0;
- for (int i = 0; i < list.Count; i++)
- {
- avg += list[i];
- }
- avg /= list.Count;
- for (int i = 0; i < list.Count; i++)
- {
- sum += (list[i] - avg) * (list[i] - avg);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment