[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Ефективна вставка даних дуже важлива для оптимальної продуктивності. Існує кілька способів підвищити швидкість вставки даних в Entity Framework. Розглянемо кілька варіантів.
BulkInsert(Масова вставка)
Під час вставки великої кількості записів слід розглянути можливість використання бібліотек масового вставляння, таких як “EntityFramework.BulkInsert” або “EntityFramework.BulkInsert.EF6” (для EF6). Ці бібліотеки можуть значно підвищити продуктивність порівняно з індивідуальною вставкою.
Якщо порівнювати швидкість роботи методів AddRanger і BulkInsert, другий є явним фаворитом:
Наприклад, припустимо, у вас є клас сутності “Person“, і ви хочете вставити в базу даних список осіб:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } List<Person> personsToInsert = new List<Person> { new Person { Name = "John Doe", Age = 30 }, new Person { Name = "Jane Smith", Age = 25 }, }; using (var context = new YourDbContext()) { // Disable AutoDetectChanges to improve performance for bulk insert context.ChangeTracker.AutoDetectChangesEnabled = false; // Perform bulk insert using the BulkInsert extension method context.BulkInsert(personsToInsert); // Re-enable AutoDetectChanges after bulk insert context.ChangeTracker.AutoDetectChangesEnabled = true; } |
Інші варіанти вставки
1. Batch Size
Якщо масове вставляння не є можливим, розгляньте можливість пакетного вставляння в більш дрібні групи. Замість того щоб вставляти всі записи одразу, розбийте їх на більш дрібні набори і виконайте кілька невеликих вставок. Такий підхід дає змогу знизити накладні витрати і підвищити загальну продуктивність.
2. Вимкніть автовизначення змін
За замовчуванням EF автоматично виявляє зміни в сутностях і відстежує їх. Однак при масовому вставленні це може призвести до збільшення продуктивності. Для підвищення продуктивності можна вимкнути функцію автоматичного виявлення змін на час вставки. Тільки не забудьте ввімкнути її знову, якщо вам потрібно буде відстежувати зміни в інших частинах програми.
Ось приклад, як це зробити:
1 2 3 |
context.Configuration.AutoDetectChangesEnabled = false; // Perform bulk inserts here context.Configuration.AutoDetectChangesEnabled = true; |
3. Використовуйте AddRange або Add з Attach
Якщо необхідно вставити кілька сутностей, використовуйте AddRange замість того, щоб викликати Add для кожної сутності окремо. Крім того, під час роботи з новими сутностями можна використовувати Add разом з Attach, щоб уникнути зайвих пошуків у базі даних.
4. Використовуйте AsNoTracking
Під час вставки великих обсягів даних, які не потрібно відстежувати, слід використовувати AsNoTracking, щоб уникнути накладних витрат на відстеження сутностей.
5. Використовуйте транзакції
При вставці даних оберніть операції в транзакцію. Це дає змогу підвищити продуктивність завдяки скороченню кількості звернень до бази даних.
6. Використовуйте збережені процедури
У деяких сценаріях використання збережених процедур для масового вставляння може бути ефективнішим, ніж використання вбудованих методів вставляння EF.
Пам’ятайте, що ефективність цих методів залежить від різних чинників, включно з об’ємом даних, конфігурацією бази даних, затримкою в мережі та іншими специфічними для конкретного застосунку факторами.
Я рекомендую провести профілювання та бенчмаркінг для конкретного випадку використання, щоб визначити найкращий підхід для вашої програми.
Я сподіваюся, що вам сподобалося читати цю статтю, і вона виявилася легкою для розуміння. Будь ласка, дайте мені знати, якщо у вас є якісь коментарі або виправлення.
Так само вам може бути цікава попередня стаття – Dependency Injection у Console App.
Ви хочете навчитися писати код мовою програмування C#?
Створювати різні інформаційні системи, що складаються з сайтів, мобільних клієнтів, десктопних додатків, телеграм-ботів тощо.
Переходьте до нас на сторінку Dijix і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:
- Доступ до пройденого матеріалу
- Тематичні статті
- Бібліотека книг
- Онлайн тестування
- Спілкування в закритих групах