Почему EntityFramework 6.1 работает лучше, чем EntityFramework Core 8, при простом запросе выбора? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему EntityFramework 6.1 работает лучше, чем EntityFramework Core 8, при простом запросе выбора? [закрыто]

Сообщение Anonymous »

У меня есть проект .NET framework 4.6, который я переписываю с помощью .NET 8. Существует простой запрос, который выполняется быстрее в EF 6, чем в EF Core 8. Этот запрос привел к снижению производительности в новом рефакторинге проекта. Запрос:
dbContext.Edits.OrderByDescending(e => e.Id).FirstOrDefaultAsync(e => e.ReferenceId == referenceId, cancellationToken)

В проекте .NET Framework 4.6 этот запрос выполняется примерно за 22 миллисекунды, но в версии .NET 8 с EF Core 8 это занимает около 700 миллисекунд. Обе версии работают в одной среде и подключены к одной и той же базе данных.
Таблица редактирования содержит более миллиона записей. Он имеет кластеризованный индекс в столбце Id и некластеризованный индекс в столбце ReferenceId (который является полем NVARCHAR). База данных работает на SQL Server 2008 (уровень совместимости 100). Поведение отслеживания отключено в обоих проектах.
Я не уверен, почему EF 6 превосходит EF Core 8 в этом сценарии. Требуется ли какое-либо изменение конфигурации или оптимизация для достижения аналогичной производительности EF Core 8?
ПРИМЕЧАНИЕ
Это Редактирует структуру таблицы:
[Id] [int] IDENTITY(1,1) NOT NULL,
[CreationDate] [datetime] NOT NULL,
[ObjectJson] [nvarchar](max) NOT NULL,
[Status] [varchar](50) NOT NULL,
[ReferenceId] [varchar](500) NOT NULL,
[LastModificationDate] [datetime] NOT NULL,
[IsDeleted] [bit] NOT NULL,
[AdminId] [int] NULL,
[ParentId] [int] NULL,

Это запрос, сгенерированный EFCore 8 с длительностью 1927 мс:
Executed DbCommand (1,927ms) [Parameters=[@__referenceId_0='?' (Size = 500)], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [e].[Id], [e].[AdminId], [e].[CreationDate], [e].[IsDeleted], [e].[LastModificationDate], [e].[ObjectJson], [e].[ParentId], [e].[ReferenceId], [e].[Status]
FROM [Edits] AS [e]
WHERE [e].[ReferenceId] = @__referenceId_0
ORDER BY [e].[Id] DESC

Странно то, что значение параметра в запросе равно ?, но он возвращает точную запись с заданным значением (RT78CEW20) !!!!
Это запрос, созданный EF 6.1:
Opened connection at 10/16/2024 9:38:02 AM +03:30

SELECT TOP (1)
[Project1].[Id] AS [Id],
[Project1].[CreationDate] AS [CreationDate],
[Project1].[ObjectJson] AS [ObjectJson],
[Project1].[Status] AS [Status],
[Project1].[ReferenceId] AS [ReferenceId],
[Project1].[LastModificationDate] AS [LastModificationDate],
[Project1].[IsDeleted] AS [IsDeleted],
[Project1].[AdminId] AS [AdminId],
[Project1].[ParentId] AS [ParentId]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[CreationDate] AS [CreationDate],
[Extent1].[ObjectJson] AS [ObjectJson],
[Extent1].[Status] AS [Status],
[Extent1].[ReferenceId] AS [ReferenceId],
[Extent1].[LastModificationDate] AS [LastModificationDate],
[Extent1].[IsDeleted] AS [IsDeleted],
[Extent1].[AdminId] AS [AdminId],
[Extent1].[ParentId] AS [ParentId]
FROM [dbo].[Edits] AS [Extent1]
WHERE [Extent1].[ReferenceId] = @p__linq__0
) AS [Project1]
ORDER BY [Project1].[Id] DESC

-- p__linq__0: 'RT78CEW20' (Type = AnsiString, Size = 8000)

-- Executing at 10/16/2024 9:38:02 AM +03:30

-- Completed in 1 ms with result: SqlDataReader


Подробнее здесь: https://stackoverflow.com/questions/790 ... 8-on-a-sim
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»