Очень простая библиотека ядра .NET, которая может помочь синхронизировать большое количество записей в памяти в базе данных с использованием класса SQLBulkCopy .
Эта библиотека предоставляет методы расширения, чтобы вы могли использовать с вашим EntityFrameWorkCore Encement DbContext Encement DBContexTextensions.cs или вы можете использовать sqlConnectionExtensions.cs напрямую с экземпляром SQLConnection без использования EntityFrameWorkCore.
https://www.nuget.org/packages/entityframeworkcore.sqlserver.simplebulks
EntityFrameWorkCore.sqlserver.simplebulks.demo
private const string _connectionString = "Server=.;Database=SimpleBulks;User Id=xxx;Password=xxx" ; using EntityFrameworkCore . SqlServer . SimpleBulks . BulkDelete ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkInsert ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkMerge ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkUpdate ;
// Insert all columns
dbct . BulkInsert ( rows ) ;
dbct . BulkInsert ( compositeKeyRows ) ;
// Insert selected columns only
dbct . BulkInsert ( rows ,
row => new { row . Column1 , row . Column2 , row . Column3 } ) ;
dbct . BulkInsert ( compositeKeyRows ,
row => new { row . Id1 , row . Id2 , row . Column1 , row . Column2 , row . Column3 } ) ;
dbct . BulkUpdate ( rows ,
row => new { row . Column3 , row . Column2 } ) ;
dbct . BulkUpdate ( compositeKeyRows ,
row => new { row . Column3 , row . Column2 } ) ;
dbct . BulkMerge ( rows ,
row => row . Id ,
row => new { row . Column1 , row . Column2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ) ;
dbct . BulkMerge ( compositeKeyRows ,
row => new { row . Id1 , row . Id2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ,
row => new { row . Id1 , row . Id2 , row . Column1 , row . Column2 , row . Column3 } ) ;
dbct . BulkDelete ( rows ) ;
dbct . BulkDelete ( compositeKeyRows ) ; using EntityFrameworkCore . SqlServer . SimpleBulks . BulkDelete ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkInsert ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkMerge ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkUpdate ;
dbct . BulkUpdate ( rows ,
[ "Column3" , "Column2" ] ) ;
dbct . BulkUpdate ( compositeKeyRows ,
[ "Column3" , "Column2" ] ) ;
dbct . BulkMerge ( rows ,
"Id" ,
[ "Column1" , "Column2" ] ,
[ "Column1" , "Column2" , "Column3" ] ) ;
dbct . BulkMerge ( compositeKeyRows ,
[ "Id1" , "Id2" ] ,
[ "Column1" , "Column2" , "Column3" ] ,
[ "Id1" , "Id2" , "Column1" , "Column2" , "Column3" ] ) ; new BulkInsertBuilder < Row > ( dbct . GetSqlConnection ( ) )
. WithColumns ( row => new { row . Column1 , row . Column2 , row . Column3 } )
// or .WithColumns([ "Column1", "Column2", "Column3" ])
. WithOutputId ( row => row . Id )
// or .WithOutputId("Id")
. ToTable ( dbct . GetTableName ( typeof ( Row ) ) )
// or .ToTable("Rows")
. Execute ( rows ) ; using EntityFrameworkCore . SqlServer . SimpleBulks . BulkDelete ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkInsert ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkMerge ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkUpdate ;
// Register Type - Table Name globaly
TableMapper . Register ( typeof ( Row ) , "Rows" ) ;
TableMapper . Register ( typeof ( CompositeKeyRow ) , "CompositeKeyRows" ) ;
connection . BulkInsert ( rows ,
row => new { row . Column1 , row . Column2 , row . Column3 } ) ;
connection . BulkInsert ( compositeKeyRows ,
row => new { row . Id1 , row . Id2 , row . Column1 , row . Column2 , row . Column3 } ) ;
connection . BulkUpdate ( rows ,
row => row . Id ,
row => new { row . Column3 , row . Column2 } ) ;
connection . BulkUpdate ( compositeKeyRows ,
row => new { row . Id1 , row . Id2 } ,
row => new { row . Column3 , row . Column2 } ) ;
connection . BulkMerge ( rows ,
row => row . Id ,
row => new { row . Column1 , row . Column2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ) ;
connection . BulkMerge ( compositeKeyRows ,
row => new { row . Id1 , row . Id2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ,
row => new { row . Id1 , row . Id2 , row . Column1 , row . Column2 , row . Column3 } ) ;
connection . BulkDelete ( rows , row => row . Id ) ;
connection . BulkDelete ( compositeKeyRows , row => new { row . Id1 , row . Id2 } ) ; using EntityFrameworkCore . SqlServer . SimpleBulks . BulkDelete ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkInsert ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkMerge ;
using EntityFrameworkCore . SqlServer . SimpleBulks . BulkUpdate ;
connection . BulkInsert ( rows , "Rows" ,
[ "Column1" , "Column2" , "Column3" ] ) ;
connection . BulkInsert ( rows . Take ( 1000 ) , "Rows" ,
typeof ( Row ) . GetDbColumnNames ( "Id" ) ) ;
connection . BulkInsert ( compositeKeyRows , "CompositeKeyRows" ,
[ "Id1" , "Id2" , "Column1" , "Column2" , "Column3" ] ) ;
connection . BulkUpdate ( rows , "Rows" ,
"Id" ,
[ "Column3" , "Column2" ] ) ;
connection . BulkUpdate ( compositeKeyRows , "CompositeKeyRows" ,
[ "Id1" , "Id2" ] ,
[ "Column3" , "Column2" ] ) ;
connection . BulkMerge ( rows , "Rows" ,
"Id" ,
[ "Column1" , "Column2" ] ,
[ "Column1" , "Column2" , "Column3" ] ) ;
connection . BulkMerge ( compositeKeyRows , "CompositeKeyRows" ,
[ "Id1" , "Id2" ] ,
[ "Column1" , "Column2" , "Column3" ] ,
[ "Id1" , "Id2" , "Column1" , "Column2" , "Column3" ] ) ;
connection . BulkDelete ( rows , "Rows" , "Id" ) ;
connection . BulkDelete ( compositeKeyRows , "CompositeKeyRows" , [ "Id1" , "Id2" ] ) ; new BulkInsertBuilder < Row > ( connection )
. WithColumns ( row => new { row . Column1 , row . Column2 , row . Column3 } )
// or .WithColumns([ "Column1", "Column2", "Column3" ])
. WithOutputId ( row => row . Id )
// or .WithOutputId("Id")
. ToTable ( "Rows" )
. Execute ( rows ) ; _context . BulkInsert ( rows ,
row => new { row . Column1 , row . Column2 , row . Column3 } ,
options =>
{
options . KeepIdentity = false ;
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . BulkUpdate ( rows ,
row => new { row . Column3 , row . Column2 } ,
options =>
{
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . BulkDelete ( rows ,
options =>
{
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . BulkMerge ( rows ,
row => row . Id ,
row => new { row . Column1 , row . Column2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ,
options =>
{
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . WithHoldLock = false ;
options . ReturnDbGeneratedId = true ;
options . LogTo = Console . WriteLine ;
} ) ; var contactsFromDb = _context . BulkMatch ( matchedContacts ,
x => new { x . CustomerId , x . CountryIsoCode } ,
options =>
{
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; var customerTableName = _context . CreateTempTable ( customers ,
x => new
{
x . IdNumber ,
x . FirstName ,
x . LastName ,
x . CurrentCountryIsoCode
} ,
options =>
{
options . BatchSize = 0 ;
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . DirectInsert ( row ,
row => new { row . Column1 , row . Column2 , row . Column3 } ,
options =>
{
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . DirectUpdate ( row ,
row => new { row . Column3 , row . Column2 } ,
options =>
{
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; _context . DirectDelete ( row ,
options =>
{
options . Timeout = 30 ;
options . LogTo = Console . WriteLine ;
} ) ; var updateResult = dbct . BulkUpdate ( rows , row => new { row . Column3 , row . Column2 } ) ;
Console . WriteLine ( $ "Updated: { updateResult . AffectedRows } row(s)" ) ; var deleteResult = dbct . BulkDelete ( rows ) ;
Console . WriteLine ( $ "Deleted: { deleteResult . AffectedRows } row(s)" ) ; var mergeResult = dbct . BulkMerge ( rows ,
row => row . Id ,
row => new { row . Column1 , row . Column2 } ,
row => new { row . Column1 , row . Column2 , row . Column3 } ) ;
Console . WriteLine ( $ "Updated: { mergeResult . UpdatedRows } row(s)" ) ;
Console . WriteLine ( $ "Inserted: { mergeResult . InsertedRows } row(s)" ) ;
Console . WriteLine ( $ "Affected: { mergeResult . AffectedRows } row(s)" ) ; Single Table /src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkinsertsingleablebenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Efcoreinsert | 100 | 45,19 мс | НА | - | - | - | 985,52 кб |
| Bulkinsert | 100 | 32,68 мс | НА | - | - | - | 93,78 КБ |
| Efcoreinsert | 1000 | 145,41 мс | НА | 1000.0000 | - | - | 9702,7 КБ |
| Bulkinsert | 1000 | 44,94 мс | НА | - | - | - | 573,84 кб |
| Efcoreinsert | 10000 | 788,90 мс | НА | 14000.0000 | 5000.0000 | - | 95727,38 КБ |
| Bulkinsert | 10000 | 126,36 мс | НА | - | - | - | 5320,53 КБ |
| Efcoreinsert | 100000 | 7,107,29 мс | НА | 146000.0000 | 36000.0000 | - | 950162,56 КБ |
| Bulkinsert | 100000 | 998,42 мс | НА | 7000.0000 | 3000.0000 | 1000.0000 | 51730,81 КБ |
| Efcoreinsert | 250000 | 18 542,56 мс | НА | 365000.0000 | 87000.0000 | - | 2352262,34 КБ |
| Bulkinsert | 250000 | 2 576,88 мс | НА | 16000.0000 | 5000.0000 | 1000.0000 | 125832.63 кб |
| Efcoreinsert | 500000 | 34,957,34 мс | НА | 730000.0000 | 170000.0000 | - | 4711772.88 кб |
| Bulkinsert | 500000 | 5553,61 мс | НА | 30000.0000 | 9000.0000 | 1000.0000 | 252707,77 КБ |
Несколько таблиц (1x родительские строки + 5x дочерний строки) /Src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkinsertmultipletablesbenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Efcoreinsert | 100 | 226,22 мс | НА | 1000.0000 | - | - | 7438,51 КБ |
| Bulkinsert | 100 | 48,38 мс | НА | - | - | - | 444,18 КБ |
| Efcoreinsert | 1000 | 566,95 мс | НА | 11000.0000 | 4000.0000 | - | 73518,48 КБ |
| Bulkinsert | 1000 | 125,77 мс | НА | - | - | - | 3460,21 КБ |
| Efcoreinsert | 10000 | 6 268,42 мс | НА | 114000.0000 | 30000.0000 | - | 731076,92 КБ |
| Bulkinsert | 10000 | 1 066,74 мс | НА | 5000.0000 | 2000.0000 | 1000.0000 | 33324.16 КБ |
| Efcoreinsert | 100000 | 59 389,89 мс | НА | 1138000.0000 | 264000.0000 | - | 7282561,93 КБ |
| Bulkinsert | 100000 | 9 504,12 мс | НА | 39000.0000 | 13000.0000 | 1000.0000 | 327100,08 КБ |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkupdatebenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Efcoreupdate | 100 | 61,65 мс | НА | - | - | 853,66 КБ |
| Bulkupdate | 100 | 27,33 мс | НА | - | - | 63,55 КБ |
| Efcoreupdate | 1000 | 143,39 мс | НА | 1000.0000 | - | 8398,1 КБ |
| Bulkupdate | 1000 | 43,95 мс | НА | - | - | 379,25 КБ |
| Efcoreupdate | 10000 | 685,97 мс | НА | 12000.0000 | 3000.0000 | 82396,19 кб |
| Bulkupdate | 10000 | 182,54 мс | НА | - | - | 3499,74 КБ |
| Efcoreupdate | 100000 | 8 495,18 мс | НА | 120000.0000 | 28000.0000 | 810248,07 кб |
| Bulkupdate | 100000 | 2 091,42 мс | НА | 5000.0000 | 1000.0000 | 33819,46 кб |
| Efcoreupdate | 250000 | 17 859,49 мс | НА | 300000.0000 | 69000.0000 | 2005895,77 кб |
| Bulkupdate | 250000 | 4290,07 мс | НА | 13000.0000 | 7000.0000 | 84352 КБ |
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Bulkupdate | 500000 | 10,19 с | НА | 27000.0000 | 16000.0000 | 164,63 МБ |
| Bulkupdate | 1000000 | 17.03 с | НА | 54000.0000 | 37000.0000 | 329,12 МБ |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkdeletebenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Efcoredelete | 100 | 73,25 мс | НА | - | - | 681,09 кб |
| Bulkdelete | 100 | 29,42 мс | НА | - | - | 43,45 кб |
| Efcoredelete | 1000 | 176,83 мс | НА | 1000.0000 | 1000.0000 | 6745 КБ |
| Bulkdelete | 1000 | 27,19 мс | НА | - | - | 236,86 КБ |
| Efcoredelete | 10000 | 1489,03 мс | НА | 10000.0000 | 2000.0000 | 66031,55 КБ |
| Bulkdelete | 10000 | 431,74 мс | НА | - | - | 2150,99 кб |
| Efcoredelete | 20000 | 6 084,87 мс | НА | 20000.0000 | 7000.0000 | 132403,3 КБ |
| Bulkdelete | 20000 | 276,52 мс | НА | - | - | 4276,01 КБ |
| Efcoredelete | 50000 | 39,933,60 мс | НА | 49000.0000 | 14000.0000 | 326164,25 КБ |
| Bulkdelete | 50000 | 1477,09 мс | НА | 1000.0000 | - | 10594,63 КБ |
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Bulkdelete | 100000 | 937,7 мс | НА | 3000.0000 | 1000.0000 | 20,67 МБ |
| Bulkdelete | 250000 | 2619,7 мс | НА | 7000.0000 | 3000.0000 | 51,7 МБ |
| Bulkdelete | 500000 | 4897,7 мс | НА | 13000.0000 | 6000.0000 | 103,22 МБ |
| Bulkdelete | 1000000 | 9 466,0 мс | НА | 26000.0000 | 12000.0000 | 206,28 МБ |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkmergebenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Efcoreupsert | 100 | 82.11 мс | НА | - | - | - | 1840.23 КБ |
| Bulkmerge | 100 | 34,27 мс | НА | - | - | - | 162,96 кб |
| Efcoreupsert | 1000 | 266,86 мс | НА | 2000.0000 | 1000.0000 | - | 17984,91 КБ |
| Bulkmerge | 1000 | 79,45 мс | НА | - | - | - | 1213.33 КБ |
| Efcoreupsert | 10000 | 1451,20 мс | НА | 26000.0000 | 8000.0000 | - | 178385.15 кб |
| Bulkmerge | 10000 | 677,47 мс | НА | 1000.0000 | - | - | 11679,42 кб |
| Efcoreupsert | 100000 | 13 902,06 мс | НА | 266000.0000 | 63000.0000 | - | 1762696,52 КБ |
| Bulkmerge | 100000 | 3415,31 мс | НА | 16000.0000 | 6000.0000 | 1000.0000 | 115233,2 КБ |
| Efcoreupsert | 250000 | 36 167,51 мс | НА | 665000.0000 | 152000.0000 | - | 4362872,57 кб |
| Bulkmerge | 250000 | 7 681,71 мс | НА | 37000.0000 | 11000.0000 | 1000.0000 | 284187,09 кб |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkmergereturndbgeneratedidbenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Returndbgeneratedid | 100 | 38,45 мс | НА | - | - | - | 151,09 кб |
| Notreturndbgeneratedid | 100 | 37,75 мс | НА | - | - | - | 116,8 КБ |
| Returndbgeneratedid | 1000 | 67,42 мс | НА | - | - | - | 1099,48 КБ |
| Notreturndbgeneratedid | 1000 | 60,02 мс | НА | - | - | - | 769,23 КБ |
| Returndbgeneratedid | 10000 | 783,73 мс | НА | 1000.0000 | - | - | 10543,62 КБ |
| Notreturndbgeneratedid | 10000 | 501,07 мс | НА | 1000.0000 | - | - | 7348,79 кб |
| Returndbgeneratedid | 100000 | 3187,89 мс | НА | 14000.0000 | 5000.0000 | 1000.0000 | 103878,09 кб |
| Notreturndbgeneratedid | 100000 | 2741,31 мс | НА | 11000.0000 | 5000.0000 | 1000.0000 | 72936,01 КБ |
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Returndbgeneratedid | 250000 | 7,799 с | НА | 32000.0000 | 8000.0000 | - | 249,8 МБ |
| Notreturndbgeneratedid | 250000 | 6,619 с | НА | 24000.0000 | 7000.0000 | - | 177,7 МБ |
| Returndbgeneratedid | 500000 | 15.051 с | НА | 66000.0000 | 19000.0000 | 1000.0000 | 500,64 МБ |
| Notreturndbgeneratedid | 500000 | 14.328 с | НА | 47000.0000 | 14000.0000 | - | 355,19 МБ |
| Returndbgeneratedid | 1000000 | 32,449 с | НА | 129000.0000 | 34000.0000 | - | 1003,67 МБ |
| Notreturndbgeneratedid | 1000000 | 28.253 с | НА | 95000.0000 | 28000.0000 | - | 710,22 МБ |
Single Column /src/entityFrameWorkCore.sqlserver.simplebulks.benchmarks/bulkmatchsinglecolumnbenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| Efcoreselect | 100 | 97.373 мс | НА | - | - | - | 1008,33 КБ |
| EfcoreBatchSelect | 100 | 7,166 мс | НА | - | - | - | 94,77 кб |
| Bulkmatch | 100 | 8,570 мс | НА | - | - | - | 106,63 КБ |
| Efcoreselect | 1000 | 720,250 мс | НА | 1000.0000 | - | - | 9761,42 КБ |
| EfcoreBatchSelect | 1000 | 6,375 мс | НА | - | - | - | 908,18 КБ |
| Bulkmatch | 1000 | 15,445 мс | НА | - | - | - | 820,36 КБ |
| Efcoreselect | 10000 | 8 075,686 мс | НА | 15000.0000 | 1000.0000 | - | 97115.62 кб |
| EfcoreBatchSelect | 10000 | 66,438 мс | НА | 1000.0000 | - | - | 9092.91 кб |
| Bulkmatch | 10000 | 69,430 мс | НА | 1000.0000 | - | - | 8177,76 КБ |
| Efcoreselect | 100000 | 81 088,718 мс | НА | 159000.0000 | 31000.0000 | 1000.0000 | 972204,7 КБ |
| EfcoreBatchSelect | 100000 | 920.412 мс | НА | 11000.0000 | 4000.0000 | 1000.0000 | 91808,56 КБ |
| Bulkmatch | 100000 | 742.030 мс | НА | 13000.0000 | 6000.0000 | 1000.0000 | 82419.43 кб |
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| EfcoreBatchSelect | 250000 | 2.101 с | НА | 26000.0000 | 11000.0000 | 1000.0000 | 224,05 МБ |
| Bulkmatch | 250000 | 2.067 с | НА | 32000.0000 | 12000.0000 | 1000.0000 | 201,64 МБ |
| EfcoreBatchSelect | 500000 | 4,239 с | НА | 53000.0000 | 20000.0000 | 2000.0000 | 448,85 МБ |
| Bulkmatch | 500000 | 4,507 с | НА | 62000.0000 | 24000.0000 | 1000.0000 | 404,03 МБ |
| EfcoreBatchSelect | 1000000 | 8,523 с | НА | 103000.0000 | 38000.0000 | 1000.0000 | 898,44 МБ |
| Bulkmatch | 1000000 | 11,585 с | НА | 123000.0000 | 46000.0000 | 1000.0000 | 808,82 МБ |
Несколько столбцов /src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkmatchmultiplecolumnsbenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Efcoreselect | 100 | 130,11 мс | НА | - | - | 1256,8 КБ |
| Bulkmatch | 100 | 15,46 мс | НА | - | - | 173,56 КБ |
| Efcoreselect | 1000 | 997,87 мс | НА | 2000.0000 | - | 12373,85 кб |
| Bulkmatch | 1000 | 43,35 мс | НА | - | - | 1358,77 КБ |
| Efcoreselect | 10000 | 9 769,96 мс | НА | 20000.0000 | 4000.0000 | 123595,97 кб |
| Bulkmatch | 10000 | 238,80 мс | НА | 2000.0000 | 1000.0000 | 13768,49 кб |
| Efcoreselect | 100000 | 89 204,16 мс | НА | 201000.0000 | 51000.0000 | 1237424.23 КБ |
| Bulkmatch | 100000 | 2612,00 мс | НА | 21000.0000 | 8000.0000 | 138686,52 КБ |
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Выделено |
|---|---|---|---|---|---|---|
| Bulkmatch | 250000 | 6,709 с | НА | 53000.0000 | 19000.0000 | 340,68 МБ |
| Bulkmatch | 500000 | 12.939 с | НА | 107000.0000 | 36000.0000 | 683,46 МБ |
| Bulkmatch | 1000000 | 25,418 с | НА | 214000.0000 | 74000.0000 | 1369,34 МБ |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/temptablebenchmarks.cs
BenchmarkDotNet =v0.13.2, OS =Windows 10 (10.0.19045.5011)
11th Gen Intel Core i7-1165G7 2.80GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK =8.0.400
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job-LGAVYD : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
InvocationCount =1 IterationCount =1 UnrollFactor =1
WarmupCount =0
| Метод | Rowscount | Иметь в виду | Ошибка | Gen0 | Gen1 | Gen2 | Выделено |
|---|---|---|---|---|---|---|---|
| CreateEmptable | 100 | 7,639 мс | НА | - | - | - | 68,03 кб |
| CreateEmptable | 1000 | 14.077 MS | НА | - | - | - | 373,76 КБ |
| CreateEmptable | 10000 | 89,789 мс | НА | - | - | - | 3455,46 КБ |
| CreateEmptable | 100000 | 574,937 мс | НА | 4000.0000 | 1000.0000 | - | 34081,95 КБ |
| CreateEmptable | 250000 | 1403,071 мс | НА | 12000.0000 | 5000.0000 | 1000.0000 | 85229,91 кб |
| CreateEmptable | 500000 | 2838,562 мс | НА | 22000.0000 | 8000.0000 | 1000.0000 | 170241,85 КБ |
| CreateEmptable | 1000000 | 6 198,206 мс | НА | 43000.0000 | 14000.0000 | 1000.0000 | 340282,7 КБ |
EntityFrameWorkCore.sqlServer.simplebulks лицензируется по лицензии MIT.