Pull to refresh

Comments 10

Честно говоря, прочитав заголовок, ожидал увидеть под катом банальный обзор редкоиспользуемых методов. А у вас тут действительно интересные моменты описаны.
Должен заметить, что конструкцию «yield return» нужно использовать аккуратно. В частности, недавно получил неожиданный BadImageFormatException на такой код: gist.github.com/1085737
С моей точки зрения код валиден, но разбираться в том, почему это не работает, я предоставил ребятам из Microsoft, написав баг-репорт. Я буду премного благодарен тому, кто разъяснит мне причину этого исключения.
А там у них вообще все плохо с компилятором стало. Вот, например, бага с энумератором, которую я нашел. Или вот бага с try...catch, тоже BadImageFormatException.
Мы с вами нашли одну и ту же багу) С try/ctache — это интересно)
Спасибо за статью, честно говоря никогда не задумывался о подобном различии объектов в LINQ.
Спасибо вам =)

Вот в качестве бонуса еще о потрохах .net
Какой самый быстрый способ проверить элемент на вхождение в список? Многие используют Contains и они абсолютно не правы
  1. var list = new List<string>();
  2. list.AddRange(Enumerable.Range(1, 10000000).Select(x => x.ToString()));
  3.  
  4. var sw = Stopwatch.StartNew();
  5. Console.WriteLine(list.Exists(x => x == "10000000"));
  6. sw.Stop();
  7.  
  8. Console.WriteLine(sw.Elapsed.TotalMilliseconds);
  9.  
  10.  
  11. sw = Stopwatch.StartNew();
  12. Console.WriteLine(list.Contains("10000000"));
  13. sw.Stop();
  14.  
  15. Console.WriteLine(sw.Elapsed.TotalMilliseconds);
  16.  
  17. sw = Stopwatch.StartNew();
  18. Console.WriteLine(list.BinarySearch("10000000") != -1);
  19. sw.Stop();
  20.  
  21. Console.WriteLine(sw.Elapsed.TotalMilliseconds);
* This source code was highlighted with Source Code Highlighter.

True
142,6747
True
187,8975
True
0,5824
Ну разница заметна, а чем подобное можно объяснить? И справедливо ли это для комплексных объектов.
Первый проигрывает, т.к. дополнительно тратимся на вызов функции предиката и функция энумератора. Во втором идет вызов прямой Equals по N элементов с первого по последний. Ну а бинарный поиск в данном случае работает быстрее, т.к. наши элементы в списке отсортированы.
ну тогда честнее будет смотреть время Sort + BinarySearch
Sign up to leave a comment.

Articles