Skip to content

Найшвидший спосіб вставки у Entity Framework

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Завантаження...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


Ефективна вставка даних дуже важлива для оптимальної продуктивності. Існує кілька способів підвищити швидкість вставки даних в Entity Framework. Розглянемо кілька варіантів.

BulkInsert(Масова вставка)

Під час вставки великої кількості записів слід розглянути можливість використання бібліотек масового вставляння, таких як “EntityFramework.BulkInsert” або “EntityFramework.BulkInsert.EF6” (для EF6). Ці бібліотеки можуть значно підвищити продуктивність порівняно з індивідуальною вставкою.

Якщо порівнювати швидкість роботи методів AddRanger і BulkInsert, другий є явним фаворитом:

AddRanger и BulkInsert

Наприклад, припустимо, у вас є клас сутності “Person“, і ви хочете вставити в базу даних список осіб:

Інші варіанти вставки

1. Batch Size

Якщо масове вставляння не є можливим, розгляньте можливість пакетного вставляння в більш дрібні групи. Замість того щоб вставляти всі записи одразу, розбийте їх на більш дрібні набори і виконайте кілька невеликих вставок. Такий підхід дає змогу знизити накладні витрати і підвищити загальну продуктивність.

2. Вимкніть автовизначення змін

За замовчуванням EF автоматично виявляє зміни в сутностях і відстежує їх. Однак при масовому вставленні це може призвести до збільшення продуктивності. Для підвищення продуктивності можна вимкнути функцію автоматичного виявлення змін на час вставки. Тільки не забудьте ввімкнути її знову, якщо вам потрібно буде відстежувати зміни в інших частинах програми.

Ось приклад, як це зробити:

3. Використовуйте AddRange або Add з Attach

Якщо необхідно вставити кілька сутностей, використовуйте AddRange замість того, щоб викликати Add для кожної сутності окремо. Крім того, під час роботи з новими сутностями можна використовувати Add разом з Attach, щоб уникнути зайвих пошуків у базі даних.

4. Використовуйте AsNoTracking

Під час вставки великих обсягів даних, які не потрібно відстежувати, слід використовувати AsNoTracking, щоб уникнути накладних витрат на відстеження сутностей.

5. Використовуйте транзакції

При вставці даних оберніть операції в транзакцію. Це дає змогу підвищити продуктивність завдяки скороченню кількості звернень до бази даних.

6. Використовуйте збережені процедури

У деяких сценаріях використання збережених процедур для масового вставляння може бути ефективнішим, ніж використання вбудованих методів вставляння EF.

Пам’ятайте, що ефективність цих методів залежить від різних чинників, включно з об’ємом даних, конфігурацією бази даних, затримкою в мережі та іншими специфічними для конкретного застосунку факторами.


Я рекомендую провести профілювання та бенчмаркінг для конкретного випадку використання, щоб визначити найкращий підхід для вашої програми.

Я сподіваюся, що вам сподобалося читати цю статтю, і вона виявилася легкою для розуміння. Будь ласка, дайте мені знати, якщо у вас є якісь коментарі або виправлення.

Так само вам може бути цікава попередня стаття – Dependency Injection у Console App.


Ви хочете навчитися писати код мовою програмування C#?

Створювати різні інформаційні системи, що складаються з сайтів, мобільних клієнтів, десктопних додатків, телеграм-ботів тощо.

Переходьте до нас на сторінку Dijix і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:

  • Доступ до пройденого матеріалу
  • Тематичні статті
  • Бібліотека книг
  • Онлайн тестування
  • Спілкування в закритих групах

https://dijix.com.ua

Живи у своєму світі, програмуй у нашому.

Published inEntity Framework Core
Subscribe
Notify of
guest
0 комментариев
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x