|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
Всем привет. Есть у нас метод. При таком подходе мы ведь выполняем излишнюю работу, вытаскивая вначале одного юзера со всеми его заказами. После чего уже в ифе считаем сумму всех его заказов. Возможно ли этот запрос сделать одной заявкой на LINQ? Так же возникает вопрос, а что делать если придёться делать две заявки? Возможно ли их как то организовать что бы послать их одновременно, вместо того что бы делать два запроса к бд? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 10:06 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafeВсем привет. Есть у нас метод. Метод просто агонь. Код: c# 1. 2. 3. 4. 5. 6.
Заявка будет адна. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 17:16 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
MonochromatiqueunsafeВсем привет. Есть у нас метод. Метод просто агонь. Код: c# 1. 2. 3. 4. 5. 6.
Заявка будет адна. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 17:17 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafe Код: c# 1.
Include — абсолютное зло. У нас я лично и саморучно линчую за подобное. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 17:25 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVosttunsafe Код: c# 1.
Include — абсолютное зло. У нас я лично и саморучно линчую за подобное. А почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 20:15 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
Monochromatique, Разве всё настолько плохо с методом? Проверил ваш метод, да, одной заявкой, но выглядит он ужасно. hVostt, Чем так плох Include? Я стажируюсь, и у нас по умолчанию прокси и лайзилоадинг отключены. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2016, 23:25 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
А ты эстет. Ну сделай так. unsafe Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2016, 08:18 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
И я бы беспокоился не об одной "заявке" LINQ, а об этом куске: Код: c# 1. 2. 3. 4.
Человек, который такое пишет - опасен. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2016, 08:21 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
MonochromatiqueА почему? Как почему? Потому что протаскивает в прикладуху подробности реализации слоя ORM, надо постоянно помнить о том, что надо включить в запрос эту инструкцию, или ты шишь получишь, надо понимать, что если ты делаешь Include коллекции, то будет извлечена вся коллекция (а это может быть мягко говоря, дохера), надо осознавать, что у Include свойства могут быть ещё вложенные свойства, которые надо вытащить, зачастую всего из-за одного какого-то поля. И к тому же это всё прибивает гвоздями к EF во всём проекте. unsafehVostt, Чем так плох Include? Я стажируюсь, и у нас по умолчанию прокси и лайзилоадинг отключены. Ну отключены и отключены. Используйте проекции. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2016, 13:14 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVostt, Поэкспериментировал, остановился на вот такой вот финальной версии: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Оцените пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2016, 13:29 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafeОцените пожалуйста. AsNoTracking в данном случае ничего не даёт. Лучше убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2016, 16:46 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafe, гуд. по поводу AsNoTracking присоединяюсь к Алексей К ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2016, 18:04 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVosttunsafe Код: c# 1.
Include — абсолютное зло. У нас я лично и саморучно линчую за подобное. А если к примеру без условия .Where(c => c.CustomerId == id). Include("Customer") тоже зло? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 06:58 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
NechtoА если к примеру без условия .Where(c => c.CustomerId == id). Include("Customer") тоже зло? В любом случае зло. Этот Include добавлен для удовлетворения потребностей в создании учебных примеров. На практике же оно крайне вредно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 07:19 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVosttNechtoА если к примеру без условия .Where(c => c.CustomerId == id). Include("Customer") тоже зло? В любом случае зло. Этот Include добавлен для удовлетворения потребностей в создании учебных примеров. На практике же оно крайне вредно. Блин. А я всегда использовал include. А как тогда быть? Справочники выносить в отдельный запрос что-ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 07:23 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
include это тот же left join ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 07:26 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
NechtoБлин. А я всегда использовал include. А как тогда быть? Справочники выносить в отдельный запрос что-ли? Решение: AutoMapper + DTO. Кстати, потом ты уже по-другому просто не захочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 11:07 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVostt, Зачем убирать AsNotracking? Разве по умолчанию данные не будут загружены в контекст? Если объекты вычитанные с помощью Entity Framework, не будут изменены и не будут участвовать в модификациях других объектов, нужно вызывать AsNoTracking() для коллекции. Или я неправильно понял . Не хотелось бы создавать новую тему, к тому же вопрос по этой же теме . Встрял в тупик с одной функцией. Целью является создание пагинация. Есть у меня дженерик класс: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
У функции ни как не могу сообразить как написать селект, что бы получить одновременно и список с элементами, и общее их кол-во. Так же вопрос насчёт .Skip(() => startFromPage).Take(() => pageSize). Ментор сказал что мы не сильно выигрываем от такой оптимизации, а читаемость кода при этом уменьшается, мол лучше просто использовать число. Функция: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Где класс CustomerAndOrdersPriceInfo у нас: Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 13:31 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafehVostt, Зачем убирать AsNotracking? Разве по умолчанию данные не будут загружены в контекст? Нет, не будут, так как ты делаешь проекцию. EF выберет только те поля, которые ты сам указал. unsafeчто бы получить одновременно и список с элементами, и общее их кол-во не надо unsafeМентор сказал что мы не сильно выигрываем от такой оптимизации я бы даже сказал, мы крупно проигрываем забери нужный набор данных и отдельно извлеки общее количество, не надо мудрить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 17:06 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVostt, При любом наличии Select в заявке отбрасывать AsNoTracking?? А что по поводу статьи ? Если учесть что Вы уже отбросили варинт с использованием лямбды в Skip и Take, насколько правдиво то что написано. Или где можно почтить про оптимизации EF ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 12:46 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
unsafehVostt, При любом наличии Select в заявке отбрасывать AsNoTracking?? При наличии Select с проекцией: p => new { p.A, p.B }. unsafeИли где можно почтить про оптимизации EF Большая часть информации по оптимизации EF настолько очевидна, что вам не требуется читать об этом в каких-то блогах. Самая мощнейшая оптимизация в EF, это проекции. Они ускоряют работу с БД до уровня, приближённого к нативным интерфейсам (ADO.NET) и по скорости держатся рядом с ультракомпактными и быстрыми ORM, как Dapper. Вот и всё, что нужно знать для начала. AsNoTracking это тоже костыль, который нафиг не упал, у нас в одном довольно большом проекте ни одного AsNoTracking — и всё работает очень быстро. Даже при всём желании нам добавить его просто тупо некуда, где мы только читаем данные, используются проекции. Где мы пишем данные, используется трекинг для эффективных запросов на запись. Нафиг он вообще нужен, кроме как для учебных лабораторных студенческих поделок или для создания ложного ощущения безопасной оптимизации — я не знаю. Советую не забивать голову трекингами и переходить к задачам бизнеса. А оптизимацией заниматься только тогда, когда это потребуется, не раньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 07:41 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
hVosttNechtoБлин. А я всегда использовал include. А как тогда быть? Справочники выносить в отдельный запрос что-ли? Решение: AutoMapper + DTO. Кстати, потом ты уже по-другому просто не захочешь. Я так понимаю это дополнение к EF Code First? Или это вообще отдельный движок работы с базой данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2016, 07:16 |
|
Как оптимизировать LINQ заявку
|
|||
---|---|---|---|
#18+
NechtoЯ так понимаю это дополнение к EF Code First? Нет, это не дополнение к EF и никак с ним напрямую не связано. AutoMapper это грубо говоря средство для копирования значений свойств экземпляра одного класса в экземпляр другого класса. Особенность этой библиотеки в том, что она умеет делать проекции для LINQ, которые «понимает» EF. Т.е. можно определить DTO класс, в который проецируются сущности EF, при этом строится эффективный SQL-запрос, которым можно управлять в конфигурации отражения AutoMapper. По большему счёту это даёт возможность практически забыть о голом SQL в подавляющем большинстве случаев, и при этом не потеря в возможности строить эффективные запросы. Остаются только тяжёлые случаи для оптимизаций, которые решаются отражением SQL VIEW на сущность EF, и оставшиеся совсем редкие случаи — это вызовы функций и процедур из SQL, но мы научились полностью обходиться без них. Мы находим элегантные быстрые решения без привлечения SQL там, где многие корифеи с пеной у рта нам доказывали, что мы без SQL утрёмся. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2016, 13:08 |
|
|
start [/forum/topic.php?fid=17&msg=39266318&tid=1349383]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 309ms |
0 / 0 |