Производительность Find () и FirstOrDefault () [дубликат]
Подобный вопрос:
Find () и Where (). FirstOrDefault ()
Получил интересный результат поиска Дианы в большой последовательности простого ссылочного типа, имеющего одностроковое свойство.
using System;
using System.Collections.Generic;
using System.Linq;
public class Customer{
public string Name {get;set;}
}
Stopwatch watch = new Stopwatch();
const string diana = "Diana";
while (Console.ReadKey().Key != ConsoleKey.Escape)
{
//Armour with 1000k++ customers. Wow, should be a product with a great success! :)
var customers = (from i in Enumerable.Range(0, 1000000)
select new Customer
{
Name = Guid.NewGuid().ToString()
}).ToList();
customers.Insert(999000, new Customer { Name = diana }); // Putting Diana at the end :)
//1. System.Linq.Enumerable.DefaultOrFirst()
watch.Restart();
customers.FirstOrDefault(c => c.Name == diana);
watch.Stop();
Console.WriteLine("Diana was found in {0} ms with System.Linq.Enumerable.FirstOrDefault().", watch.ElapsedMilliseconds);
//2. System.Collections.Generic.List.Find()
watch.Restart();
customers.Find(c => c.Name == diana);
watch.Stop();
Console.WriteLine("Diana was found in {0} ms with System.Collections.Generic.List.Find().", watch.ElapsedMilliseconds);
}
Это из-за отсутствия издержек Enumerator в List.Find () или из-за этого плюс что-то еще?
Find()
работает почти вдвое быстрее, надеясь.Сеть Команда не отметит это как устаревшее в будущем.