Использование класса StackExchange.Profiling.MiniProfiler
для профилирования приложения ASP.NET MVC с Linq-To-Sql в качестве ORM.
Я пытаюсь сократить одно действие до одного SQL, чтобы у меня больше не было дубликатов. Поэтому я соответствующим образом изменил свой код linq-to-sql, но это не оказало положительного влияния на скорость.
Затем я проверил время, необходимое для SQL.
Это показывает MiniProfiler:
Когда я запускаю точно такой же SQL в Management Studio, он работает очень быстро:
Вот код:
from t in type
let tDoc = (from d in context.documents
where d.Key == t.No
&& d.RType == (int)RType.Art
&& d.AType == (int)AType.Doc
select d).FirstOrDefault(d => d.UseForThumb)
select new Time
{
Id = t.Id,
//... more simple mappings here
// then a complex one:
DocsCount = context.documents.Count(d =>
(d.Key == t.Id.ToString()
&& d.RType == (int)RType.Type
&& d.AType == (int)AType.Doc)
||
(d.Key == t.No
&& d.RType == (int)RType.Art
&& d.AType == (int)AType.Doc)),
// and another one
ThumbId = (tDoc != null && tDoc.FRKey.HasValue) ? tDoc.FRKey.Value : 0
};
В чем может быть причина такой огромной разницы? - Изменить: нет никакой разницы, я просто неправильно истолковал SSMS :(
В любом случае, моя проблема сохраняется. Что я могу изменить, чтобы сделать его быстрее?
Я когда-то читал, что отображение из Linq-To-Sql имеет проблему с производительностью. Есть ли способ обойти это?
Filter
стоит 82%, что, как я предполагаю, связано с тем, что она фильтрует 17 788 096 строк... - person Philipp M   schedule 26.04.2013