Comments 10
Честно говоря, прочитав заголовок, ожидал увидеть под катом банальный обзор редкоиспользуемых методов. А у вас тут действительно интересные моменты описаны.
Должен заметить, что конструкцию «yield return» нужно использовать аккуратно. В частности, недавно получил неожиданный BadImageFormatException на такой код: gist.github.com/1085737
С моей точки зрения код валиден, но разбираться в том, почему это не работает, я предоставил ребятам из Microsoft, написав баг-репорт. Я буду премного благодарен тому, кто разъяснит мне причину этого исключения.
С моей точки зрения код валиден, но разбираться в том, почему это не работает, я предоставил ребятам из Microsoft, написав баг-репорт. Я буду премного благодарен тому, кто разъяснит мне причину этого исключения.
Спасибо за статью, честно говоря никогда не задумывался о подобном различии объектов в LINQ.
Спасибо вам =)
Вот в качестве бонуса еще о потрохах .net
Какой самый быстрый способ проверить элемент на вхождение в список? Многие используют Contains и они абсолютно не правы
Вот в качестве бонуса еще о потрохах .net
Какой самый быстрый способ проверить элемент на вхождение в список? Многие используют Contains и они абсолютно не правы
- var list = new List<string>();
- list.AddRange(Enumerable.Range(1, 10000000).Select(x => x.ToString()));
-
- var sw = Stopwatch.StartNew();
- Console.WriteLine(list.Exists(x => x == "10000000"));
- sw.Stop();
-
- Console.WriteLine(sw.Elapsed.TotalMilliseconds);
-
-
- sw = Stopwatch.StartNew();
- Console.WriteLine(list.Contains("10000000"));
- sw.Stop();
-
- Console.WriteLine(sw.Elapsed.TotalMilliseconds);
-
- sw = Stopwatch.StartNew();
- Console.WriteLine(list.BinarySearch("10000000") != -1);
- sw.Stop();
-
- 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 элементов с первого по последний. Ну а бинарный поиск в данном случае работает быстрее, т.к. наши элементы в списке отсортированы.
Sign up to leave a comment.
Сложно о простом или особенности Linq to objects