171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|||||||||||
1 | |||||||||||
Оптимизация и целесообразность LINQ запроса12.12.2013, 13:25. Показов 2407. Ответов 16
Метки нет (Все метки)
Добрый день. Решил воткнуть Linq в свой курсач, просто для саморазвития, потому что до этого не работал с ним ни разу
Без Linq Кликните здесь для просмотра всего текста
c Linq Кликните здесь для просмотра всего текста
Собственно что то мне подсказывает что в моем примере запрос выполняется дважды 1. if (linq_pass.Count() != 0) 2. main_grid.ItemsSource = linq_pass; т.к linq_pass.Count() функция, а в первом примере search_list.Count - значение. Может действительно в данном случае использовать Linq не имеет смысла? Добавлено через 6 минут ну и вообще в каком случае будет лучше производительность?
0
|
12.12.2013, 13:25 | |
Ответы с готовыми решениями:
16
Оптимизация linq-запроса Оптимизация linq запроса Оптимизация(рефакторинг) LINQ запроса Целесообразность использования LINQ |
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
|
|
12.12.2013, 13:29 | 2 |
Count() - вызывает запрос Linq.
Linq создан, что комфорта программирования. Времена Pentium II уже давно прошли, современный компьютер способен справиться с почти всеми типичными задачами (по мощности), проблема производительности все больше перестает быть узким местом, для львинной доли задач (точнее уже давно перестала ) - взамен, удобство, скорость разработки, а главное читаемость кода , -становятся приоритетными. С подобными мыслями я встречал только параноиков на C++.
0
|
171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|
12.12.2013, 13:31 [ТС] | 3 |
замерил и то и то через Stopwatch.ElapsedTicks разницы особо не увидел)
0
|
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
|
|
12.12.2013, 13:36 | 4 |
5665tm, прогони тот и тот вариант через цикл в миллион итерации и сравни общее время)
0
|
171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|
12.12.2013, 14:42 [ТС] | 5 |
лол, не думаю что кто то будет миллион раз искать инфу по паспорту
так то оно так, но возможности то не безграничны, а что если записей несколько тысяч? и глядя на тормоза некоторых приложений при достаточно банальных операциях я что то не ощущаю что будущее наступило. Как бы там ни было, при сотне записей Linq оказался даже в среднем в два-три раза быстрее, чем без него, причем последующие поиски выполняются гораздо быстрее чем первый, видимо происходит нечто вроде кеширования.
0
|
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
|
|
12.12.2013, 14:45 | 6 |
Йод...именно для этого я и сказал посмотреть результаты. А не запихивать миллионы операций в конечный продукт.
0
|
171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|
12.12.2013, 15:05 [ТС] | 7 |
ITL, ну эмм... миллион раз найти одно значение среди 20 записей и один раз найти значение среди миллиона записей ведь разные вещи, разве нет? грубо говоря это как миллион раз написать Hello World и один раз написать ось в моем понимании. Не вижу смысла миллион раз искать одно и тоже, результат предсказуем, нужно всего лишь 70 000 (результат для одного поиска) умножить на 1 000 000. А вот при поиске среди разного количества значений насколько я помню время зависит нелинейно.
Во всяком случае при увеличении количества записей в 10 раз, время поиска увеличилось всего на 10-20%. Замерял именно время поиска без всяких выводов в label и data grid, так что все точно Добавлено через 4 минуты А хотя нет, криво я замерял, вывод попадал, недоглядел, так что я неправ во многих своих высказываниях выше, в общем в топку этот спор, я действительно сильно заморочился) как оказалось время поиска пренебрежительно мало по сравнению с временем выводом результатов на экран.
0
|
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
|
|
12.12.2013, 15:17 | 8 |
"А если записей несколько тысяч" , "а если записей миллионы", "а если миллиарды"- это и называется паранойя.
Обычно условия задачи известны заранее и достаточно мало задач имеющих миллионы или миллиарды записей, как я уже говорил, для 99,99% решаемых задач, результат работы будет незаметен, для пользователя.
0
|
12.12.2013, 16:31 | 9 |
Да они известны заранее, есть заказчик, он говорит у меня 10000 договоров, вы делаете программу, а потом появляется еще один и у него уже 1000000 договоров, а с договорами связаны счета фактур и другие документы. И вот тут вы поймаете что нужно срочно переписывать, а то все тормозит.
Я видел код на ling с пару страниц в VS, так вот i7 не справлялся (за приемлемое время), пришлось переписывать.
0
|
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
|
|
12.12.2013, 17:07 | 10 |
Такие задачи не зависят от языка, причем тут C#. В Linq есть Linq asParallel(),который распределяет всю нагрузку между всеми процессорами. Итого, что можно получить на C# за 1 минуту будет реализовано на с++ например за 2 часа, с плясками и бубнами, да еще и криво.
Хотел заметить, что далеко не все приложения, что тормозят написаны на C# с Linq , как раз таки многие написаны не сверх быстром, как тебе кажется C++, такими же как ты "борцами за быстродействие", которые своими кривыми руками не могут сделать ничего стоящего, оперируя языком 80х годов. C# при запуске компилирует проект из IL в родной код, и кэширует его на диске, потом лишь запуская уже его кеш версию, в виде родного кода, но C# при генерации родного кода учитывает специфику компьютера и его процессор и оптимизирует его, что стандартному компилятору С++ не доступно. Мы всегда придумывали миллионы, операций, когда был Pentium II, но сейчас компьютеры куда лучше и мы забыли про миллионы, а уже говорим про миллиарды, будет новое поколение компьютеров - будем снова говорить , но уже про Квадриллионы , - это не паранойя?? товарищ Но % задач, при этом которые упираются в производительность, все меньше и меньше, например 1 задача из 1000, но всегда будут параноики , которые будут равняться на эту 0,001 % часть задач, и игнорировать остальные 99,999% всех задач. Добавлено через 5 минут ..... И не надо на меня выплескивать агрессию, ваше дело - идите в с++ там пишите велосипеды, с плясками и танцами. Я лишь написал свое мнение, если вас оно не устраивает мне все равно.
1
|
12.12.2013, 17:15 | 11 | |||||
Да ладно, может наоборот 99% задач как раз критичны к производительности.
Вот простой пример, лик запрос отрабатывает в 6 раз медленнее при 100000.
Какая агрессия вы о чем, я тоже высказал свое мнение.
0
|
Администратор
|
|
12.12.2013, 18:47 | 12 |
Это зависит от сложности вашего алгоритма, если она O(n) - то время растёт линейно: 1 за 1 сек, 1000 за 1000 сек, а если другая, например O(n2) - то для 1000 будет уже 10002 = 106 сек
1
|
171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|
12.12.2013, 18:59 [ТС] | 13 |
я это понимаю, что то такое в Кормене было) я имел в виду что не помню точно является ли, как бы это сказать, сложность алгоритма поиска записи в бд линейной.
Добавлено через 1 минуту Где то тут в соседней темке один товарищ жаловался что его цикл выполняется 12 секунд. Пустяки, можно же подождать.
0
|
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
|
|
12.12.2013, 22:16 | 14 |
Вы так и не поняли, 6 mc или 60 mc, какая разница для человека?, зато в 10! раз медленнее. И таких задач 99% , в которых пользователь не заметит разницы в работе. В крайнем случае, в C# есть масса прекрасных инструментов для распараллеливания кода.
Самый быстрый код, не всегда легко читаемый,компактный, аккуратный, а главное быстрый в разработке и способный к долгосрочному сопровождению разными программистами. Если исходить из этого, то так вообще лучше писать на ассемблере, не применяя никакого ООП, а смешивая все в зависимую друг от друга кучу, и такой код будет самый быстрый, но большие проекты ему не под силу, а за поддержку нужно вообще забыть. В наш век быстрота написания крупного объема кода и его поддержка становится чуть ли не ключевым фактором в выборе инструмента программирования, а производительность все больше перестает быть узким местом в программировании. Часто в задачах вы делаете циклы по 1000 000 или по 10 000 000 итераций? Я например вообще не помню когда писал последний раз цикл хотя бы в 100 000 итераций, кроме как для учебных примеров. Не хотел никого обидеть.
1
|
12.12.2013, 22:39 | 15 |
К сожалению, последнее время я вижу другую тенденцию.
Да и еще кто нибудь может показать, как сами товарищи из Microsoft используют Linq в разработке NET Framework? Добавлено через 5 минут Наверное вы не писали системы оптимизации работы оборудования.
0
|
10 / 25 / 9
Регистрация: 08.12.2013
Сообщений: 115
|
|
12.12.2013, 22:43 | 16 |
Мое мнение думаю уже предельно понятно.
Делайте как считаете нужным.
0
|
171 / 120 / 14
Регистрация: 17.06.2013
Сообщений: 386
|
|
12.12.2013, 22:47 [ТС] | 17 |
Hsert, я не спорю с тем что можно пренебречь некоторой долей производительности для улучшения сопровождения приложения, здесь вы правы на 100% Но когда дело доходит до того что на двухядерном планшете я не могу просто плавно листать страницы в браузере мне действительно становится не очень комфортно скажем так
0
|
12.12.2013, 22:47 | |
12.12.2013, 22:47 | |
Помогаю со студенческими работами здесь
17
Оптимизация кода запроса, или как обойтись без запроса? LINQ to XML. Оптимизация метода для сохранения документа Результат запроса LINQ Результат LINQ запроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |