Привет
Кто может объяснить такой факт.
Запускаем данный код и видим,
что первый вызов 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;
}