Я пытаюсь получить сериализованные результаты из службы WCF из базы данных, используя linq.
Таблицы в БД в некоторой степени нормализованы, и я возвращаю некоторые другие данные вместе с тем, что я изначальнополучить с помощью запроса linq, используя Data.Linq.DataLoadOptions, как в блоге Скотта Лэндфорда: http://codeexperiment.com/post/Returning-LINQ-to-SQL-Entities-From-WCF.aspx
Вот часть моего кода, которая имеет отношение:
ServerDALDataContext db = new ServerDALDataContext();
System.Data.Linq.DataLoadOptions dlo = new System.Data.Linq.DataLoadOptions();
// get COMPETITOR_ENTRies data along with COMPETITION
dlo.LoadWith<COMPETITION>(e => e.COMPETITOR_ENTRies);
// get dividends for competitors along with COMPETITOR_ENTRies
dlo.LoadWith<COMPETITOR_ENTRY>(e => e.DIVIDENDs);
db.LoadOptions = dlo;
// retrieve MEETING data from database
var competitions = (from c in db.COMPETITIONs
select c)
.AsEnumerable()
.Where(c => c.CONTROL_UPDATE_DATA.FOR_UPDATE);
&& c.COMPETITION_DATETIME.Value.Date == dateFrom.Date);
// return as list
return competitions != null ? competitions.ToList() : null;
Есть такжеклиентское приложение, которое использует службу и отправляет асинхронные запросы службе WCF каждые 10 секунд или около того.
Проблема, которая возникает, заключается в том, что при использовании она фактически перегружает сервер SQL до такой степени, чтовсе время использует процессор на 100%, что приводит к задержке ответов клиента.Я удаляю вызовы dlo.LoadWith, и ответы приходят в значимое время.
Любые предложения о том, как решить эту проблему, и не слишком ли сильно перегружать сервер SQL?