Возможный дубликат:
Найти() vs. Where(). FirstOrDefault()
Получил интересный результат для поиска Дианы в большой последовательности простого ссылочного типа, имеющего однострочное свойство.
Stopwatch watch = new Stopwatch();        
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<T>.Find()
    watch.Restart();
    customers.Find(c => c.Name == diana);
    watch.Stop();
    Console.WriteLine("Diana was found in {0} ms with System.Collections.Generic.List<T>.Find().", watch.ElapsedMilliseconds);
}
 
Это из-за отсутствия служебных ресурсов Enumerator в List.Find() или этого плюс, возможно, что-то еще?
 Find() работает почти в два раза быстрее, надеясь, что команда .Net не будет отмечать его Устаревшее в будущем.

 .
.