У меня есть проект .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
Почему EntityFramework 6.1 работает лучше, чем EntityFramework Core 8, при простом запросе выбора? [закрыто] ⇐ C#
Место общения программистов C#
1729063022
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?
[b]ПРИМЕЧАНИЕ[/b]
Это Редактирует структуру таблицы:
[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
Подробнее здесь: [url]https://stackoverflow.com/questions/79089250/why-does-entityframework-6-1-perform-better-than-entityframework-core-8-on-a-sim[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия