Language Integrated Query (LINQ) — это конвейер выполнения запросов, применяемый в управляемой среде. NET Framework. В сущности, LINQ представляет собой разработанное специалистами Microsoft средство объектно-реляционной проекции между бизнес-объектами и базовыми источниками данных, которое обеспечивает упрощенную среду для обращения к реляционным данным объектно-ориентированным способом.

Отслеживание объектов. Отключите свойство Object­Tracking­Enabled, если оно не потребуется. Если вы планируете только считывать данные через контекст данных и не собираетесь редактировать их, отключите свойство ObjectTrackingEnabled; таким образом вы деактивируете ненужную функцию управления идентичностью объектов, что приведет к повышению производительности приложения.

Проиллюстрируем сказанное на примере:

using (TestDataContext dataContext = new TestDataContext ()) 
{ 
dataContext.ObjectTrackingEnabled = false;
} 

Контексты данных. Если в приложении используется несколько несоединенных баз данных, попробуйте применить несколько контекстов данных с целью снижения расходов на управление идентичностью и отслеживание объектов. Присоединяйте к контексту данных только те объекты, которые были изменены.

Откомпилированные запросы. Для повышения производительности приложения можно задействовать откомпилированные запросы. Но не забывайте, что при использовании того или иного откомпилированного запроса в первый раз вам нужно быть готовым к высоким затратам. Поэтому проследите за тем, чтобы откомпилированные запросы применялись лишь в тех случаях, когда они действительно нужны, то есть когда эти запросы будут применяться многократно.

Оптимистический параллелизм. Управление параллелизмом — это механизм, позволяющий выявлять и разрешать конфликты, возникающие вследствие параллельных запросов к одному и тому же ресурсу в тот или иной момент времени. Параллелизм в ADO.NET бывает двух типов: оптимистический и пессимистический. По умолчанию LINQ следует модели оптимистического параллелизма. Без особой надобности механизм оптимистического параллелизма лучше не применять. Чтобы отключить проверку на наличие оптимистического параллелизма, вы можете использовать UpdateCheck.Never в сопоставлении на уровне атрибутов для классов объектов, как показано ниже:

[Column (Storage="_FirstName", DbType="NText", 
UpdateCheck=UpdateCheck.Never)] 
public string FirstName 
{ 
get 
{ 
return this._FirstName;
} 
set 
{ 
if ((this.FirstName 
!=value)) 
{ 
this.OnFirstNameChanging (value);
this.SendPropertyChanging ();
this._FirstName =value;
this.SendPropertyChanged ("FirstName");
this.OnFirstNameChanged ();
} 
} 
} 

Считывание выбранных данных. При необходимости связывания разбитых на страницы данных с органами управления данными используйте методы Take и Skip.

Пример:

private List GetStudentRecordss (int index, intsize) 
{ 
using (TestDataContextdataContext = new TestDataContext ()) 
{ 
returndataContext.Students 
.Take (size) 
.Skip (index * size) 
.ToList ();
} 
} 

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

using (TestDataContext dataContext = new TestDataContext ()) 
{ 
DataLoadOptionsdataLoadOptions = new DataLoadOptions ();
dataLoadOptions.AssociateWith 
(emp=>emp.Department.Where (dept => dept.DeptCode == 1));
dataContext.LoadOptions =dataLoadOptions;
} 

Анализ запросов. Воспользовавшись свойством Log контекста данных, как показано в публикуемом ниже фрагменте кода:

using (TestDataContext dataContext = new TestDataContext ()) 
{ 
#if DEBUG 
dataContext.Log =Console.Out;
#endif 
}

вы также можете проанализировать инструкции SQL и отслеживать их в Visual Studio IDE.