LINQ против наборов данных - снижение производительности? - PullRequest
1 голос
/ 26 ноября 2009

Я реорганизую существующее приложение VB.NET для использования Linq. Я был в состоянии успешно заставить это работать, но это берет возрасты (больше минуты) на клиентском компьютере!

У них много строк в таблице базы данных, но старая версия программы на том же компьютере (которая использует наборы данных) занимает 5 секунд.

Мои запросы Linq довольно стандартны, например:

Dim query = From t As TRANSACTION In db.TRANSACTIONs _<br> where t.transactionID = transactionID _<br> select t

Они только возвращают одну или ноль строк. Есть мысли?

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

Код, который вы вставили, на самом деле вообще не обращается к базе данных - то, что вы будете делать дальше с запросом, определит, сколько данных в итоге будет передано клиенту. Возможно ли, что то, что вы делаете позже, заставляет версию LINQ загружать больше данных, чем версия набора данных?

Я сделал такой же переход в проекте и видел только эквивалентную или лучшую производительность от LINQ, но были случаи, когда версия LINQ выполняла намного больше обращений к серверу, например, выполнение Count () с последующей выборкой данных в виде двух отдельных запросов к серверу. Обычно я решал эту проблему с помощью .ToList (), чтобы получить данные локально, прежде чем работать с ними. Вам иногда нужно использовать SQL Profiler, чтобы узнать, что происходит за кулисами.

2 голосов
/ 26 ноября 2009

Я удивлен огромной разницей во времени (от 5 секунд до 60+ секунд). Я предполагаю, что это будет зависеть от того, насколько сложна сущность TRANSACTION. LINQ to SQL обработает каждую строку из вашего набора результатов и превратит ее в объект, а затем добавит некоторую информацию отслеживания состояния в DataContext. DataSet просто хранит необработанные данные и обрабатывает их в строго типизированные данные, когда вы читаете их из DataTable. Я не ожидал бы, что L2S увеличится в 12 раз, но я бы ожидал некоторого увеличения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...