Я читаю записи из базы данных и проверяю некоторые условия и храните их в List<Result>
. Результат - это класс. Затем выполните запрос LINQ в List<Result>
, например, группировку, подсчет и т. Д. Таким образом, может быть вероятность того, что мин. 50 000 записей в List<Result>
, поэтому в этом ли лучше, чтобы LINQ (или) повторно вставлял записи в db и выполнял запросы?LINQ performance
ответ
Почему бы не сохранить его в IQueryable вместо списка и использовать LINQ to SQL или LINQ to Entities, фактический набор данных никогда не будет выгружен в память, и запросы фактически перейдут в базу данных для запуска.
Пример:
Database db = new Database(); // this is what L2E gives you...
var children = db.Person.Where(p => p.Age < 21); // no actual database query performed
// will do : "select count(*) from Person where Age < 21"
int numChildren = children.Count();
var grouped = children.GroupBy(p => p.Age); // no actual query
int youngest = children.Min(p => p.Age); // performs query
int numYoungest = youngest.Count(p => p.Age == youngest); // performs query.
var youngestNames = children.Where(p => p.Age == youngest).Select(p => p.Name); // no query
var anArray = youngestNames.ToArray(); // performs query
string names = string.join(", ", anArray); // no query of course
В настоящее время я задаю тот же вопрос прямо сейчас. Я тоже не знаю точного ответа, но из того, что я знаю, LINQ не очень хорошо разбирается в объектах. Кроме того, поскольку List не индексируется, когда вы делаете предварительный запрос на них, бэкэнд, вероятно, потребуется сделать много вычислений, чтобы получить то, что вы просили. Кроме того, этот код является общим, поэтому он означает более медленное выполнение.
Лучше всего, если вы в состоянии, сделать все в одном запросе или даже сделать startproc для обработки. Или еще одна возможность, если вы всегда проверяете одно и то же начальное условие, create a view и выполняете свой запрос непосредственно в этой таблице (вместо повторного ввода с клиента). Я думаю, что если у вас более 50 000 результатов, вероятно, использование списка - это не очень хорошая идея (память и производительность).
Это, вероятно, не отвечает на ваш вопрос напрямую, но, помимо выполнения теста, вы не будете знать. Это зависит от того, что вы делаете с данными.
Даже если объекты большие (скажем, 1 КБ), 50 000 из них по-прежнему составляют только 50 МБ памяти. Однако я буду беспокоиться о том, чтобы вытащить эти данные из базы данных. – tster
- 1. LINQ Performance
- 2. Linq Date Performance Death
- 3. linq vs ado.net performance
- 4. linq to xml performance
- 5. LINQ performance FAQ
- 6. linq foreach performance
- 7. LINQ Joins - Performance
- 8. LINQ to Nhibernate performance
- 9. Linq Performance с предикатами
- 10. LINQ to SQL/LINQ to Collections Performance
- 11. LINQ to SQL Comparison Performance
- 12. Linq ToList/ToArray/ToDictionary performance
- 13. Улучшение Linq до Datatable Performance
- 14. Linq performance: Any vs. Содержит
- 15. C# Linq Performance с большим списком
- 16. C# Linq to Objects - FirstOrDefault performance
- 17. MongoDB C# Driver: API vs Linq Performance
- 18. Linq To Sql vs Entity Framework Performance
- 19. Linq to SQL Performance using содержит
- 20. LINQ to Entities Transaction Performance Issue
- 21. linq to sql startwith performance индексированные столбцы
- 22. RethinkDB update performance performance
- 23. C# out performance performance
- 24. SQL where performance performance
- 25. Jameter Performance Testing DataBase Performance
- 26. 2dsphere vs 2d performance performance
- 27. ActiveMQ Mirrored Performance Performance Penalty
- 28. JOIN on concatenated performance performance
- 29. buildConfig.groovy compile/performance dependency performance
- 30. IQueryable Query Performance Tuning
Это может зависеть от характера ваших запросов. Если запросы могут быть полезны из индексов базы данных, и если вы ожидаете выполнить множество запросов, а общая выгода перевешивает «налог на повторную вставку», вы можете воспользоваться использованием таблицы SQL. Без каких-либо подробностей трудно рекомендовать больше, чем «попробовать и сообщить нам». – kbrimington
И после того, как вы попробуете, было бы интересно посмотреть, будет ли переход к PLINQ в .NET 4.0 для вас более высокой. Держать нас в курсе! – Dave
Какой LINQ? LINQ to SQL? –