Я использую LinqToSql для запроса небольшой простой базы данных SQL Server CE.
Я заметил, что любые операции, связанные с под-свойствами, удручающе медленны.
Например, если у меня есть таблица Customer
, на которую ссылается таблица Order
, LinqToSql автоматически создаст свойство EntitySet<Order>
. Это приятное удобство, позволяющее мне делать что-то вроде Customer.Order.Where(o => o.ProductName = "Stopwatch")
, но по какой-то причине SQL Server CE довольно плохо зависает, когда я пытаюсь сделать что-то подобное. Один из моих запросов, который не так уж и сложен, занимает 3-4 секунды.
Я могу получить скорость до приемлемой, даже быстрой, если я просто возьму две таблицы по отдельности и преобразую их в List<Customer>
и List<Order>
, а затем соединю их вручную с моим собственным запросом, но это требует много дополнительный код LinqToSql генерирует эти EntitySet<T>
свойства автоматически - я бы хотел их использовать.
Итак, как я могу улучшить производительность? Например, есть ли варианты DataContext
, которые могут помочь?
Примечание. Моя база данных в исходном состоянии составляет всего около 250 КБ, и я не ожидаю, что она увеличится до более чем 1-2 МБ. Так что не так много записей.
Обновление
Вот определения таблиц для примера, который я использовал в своем вопросе:
create table Order
(
Id int identity(1, 1) primary key,
ProductName ntext null,
Quantity int null
)
create table Customer
(
Id int identity(1, 1) primary key,
OrderId int null references Order (Id)
)