Linq.AsParallel()
От: Аноним  
Дата: 06.05.13 17:02
Оценка:
Привет

Кто может объяснить такой факт.
Запускаем данный код и видим,
что первый вызов K1 всегда дает, что время работы Sum для Array в разы дольше чем Queue,
а вот последующие вызовы уже Array работает быстрей.
Я конечно понял, что второй и следующие разы K1 уже скомпилирована, но почему в первый раз Array занимеает намного дольше, чем Queue. И что самое интересное, если их поменять месстами, то Queue уже будет занимать дольше времени?


  class Program
    {
        static void Main(string[] args)
        {
            K1(50000);
            K1(50000);
            K1(50000);
            Console.ReadKey();
        }
        static void K1(int N)
        {
            var count = N;
            Queue<Country> queue = new Queue<Country>(count);
            for (int i = 0; i < count; i++)
                queue.Enqueue(new Country() { Id = i, Name = i.ToString() });

            Country[] arr = new Country[count];
            for (int i = 0; i < count; i++)
                arr[i] = new Country() { Id = i, Name = i.ToString() };

            Stopwatch sw = new Stopwatch();
            sw.Start();
            Int64 sum = arr.AsParallel().Sum(p => p.Id);
            sw.Stop();

            Stopwatch sw2 = new Stopwatch();
            sw2.Start();
            Int64 sum2 = queue.AsParallel().Sum(p => p.Id);
            sw2.Stop();


            Console.WriteLine("ARRAY " + sw.ElapsedMilliseconds);
            Console.WriteLine("queue " + sw2.ElapsedMilliseconds);
        }
    }
    class Country
    {
        public int Id;
        public string Name;
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.