Linq to SQL: оптимизация запросов с помощью Sql Server Compact Edition - PullRequest
0 голосов
/ 11 июня 2009

Я использую Linq to SQL против Sql Server CE.

База данных доступна только для чтения, поэтому у меня может быть несколько предположений.

Чтобы воздержаться от доступа к файловой системе, мой первоначальный подход состоял в том, чтобы кэшировать необходимые сущности в память приложения и использовать linq для объектов против них.

Хотя это хорошо работает для ограниченных запросов, прямое использование Linq для SQL лучше, чем Linq для объектов, когда присоединяются там, где это необходимо.

Возвращаясь к исходной точке, я хочу оптимизировать свою производительность, сейчас я думаю о том, чтобы принудительно загрузить весь файл в ОЗУ и использовать Linq для SQL против него.

Есть мысли о том, как это сделать? Есть еще идеи?

Ariel

Ответы [ 2 ]

1 голос
/ 18 июня 2009

Похоже, ваша проблема в производительности индекса SQL / внешнего ключа и производительности итератора коллекции.

Linq to Datasets действительно предлагает способ сохранения отношений (более конкретно, наборы данных ADO.net имеют коллекцию отношений) и может обеспечивать применение первичного ключа, внешнего ключа и уникальных ограничений. Таким образом, их производительность объединения должна быть аналогична Linq to SQL, но будет выполняться в памяти.

Исходя из моего понимания реализаций lite sql, транзакции могут сильно повлиять на производительность, поэтому просто начните свое соединение с

BEGIN TRANSACTION

может оказать существенное влияние, если вы можете оставить соединение открытым для всех ваших запросов. Тем не менее, сравнительный анализ - это, пожалуй, единственный верный способ ответить на этот вопрос.

0 голосов
/ 16 июня 2009

Вы пробовали Linq to DataSet ?

вы можете загрузить все в память и использовать запрос Linq

Понятия не имею, будет ли объединение работать так, как вы хотите

...