Я проводил некоторое тестирование, и прямые запросы LINQ-to-SQL выполнялись как минимум на 80% быстрее, чем при вызове хранимых процедур через запрос LINQ
В профилировщике SQL Server общий запрос LINQ
var results = from m in _dataContext.Members
select m;
заняло всего 19 миллисекунд, в отличие от хранимой процедуры
var results = from m in _dataContext.GetMember(userName)
select m;
(GetMember
- хранимая процедура), выполняющий тот же запрос, который занял 100 миллисекунд
Почему это?
Edit:
Прямой LINQ выглядит так в Profiler
SELECT
[t1].[MemberID], [t1].[Aspnetusername], [t1].[Aspnetpassword],
[t1].[EmailAddr], [t1].[DateCreated],
[t1].[Location], [t1].[DaimokuGoal], [t1].[PreviewImageID],
[t1].[value] AS [LastDaimoku],
[t1].[value2] AS [LastNotefied],
[t1].[value3] AS [LastActivityDate], [t1].[IsActivated]
FROM
(SELECT
[t0].[MemberID], [t0].[Aspnetusername], [t0].[Aspnetpassword],
[t0].[EmailAddr], [t0].[DateCreated], [t0].[Location],
[t0].[DaimokuGoal], [t0].[PreviewImageID],
[t0].[LastDaimoku] AS [value], [t0].[LastNotefied] AS [value2],
[t0].[LastActivityDate] AS [value3], [t0].[IsActivated]
FROM
[dbo].[Members] AS [t0]) AS [t1]
WHERE
[t1].[EmailAddr] = @p0
Хранимая процедура - это
SELECT Members.*
FROM Members
WHERE dbo.Members.EmailAddr = @Username
Итак, вы видите, что запрос к хранимой процедуре намного проще ... но все же он медленнее .... не имеет смысла для меня.