Une bibliothèque de base .NET très simple qui peut aider à synchroniser un grand nombre d'enregistrements en mémoire dans la base de données à l'aide de la classe SQLBulkCopy .
Cette bibliothèque fournit des méthodes d'extension afin que vous puissiez utiliser avec votre instance EntityFrameWorkCore dbContext dbContexTexttensions.cs ou vous pouvez utiliser SQLConnectionExtensions.cs pour travailler directement avec une instance SQLConnection sans utiliser 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)" ) ; Table unique /src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkinsertsingletablebenchmarks.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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| Efcoreinsert | 100 | 45.19 ms | N / A | - | - | - | 985,52 kb |
| Bulkinsert | 100 | 32,68 ms | N / A | - | - | - | 93,78 Ko |
| Efcoreinsert | 1000 | 145.41 ms | N / A | 1000.0000 | - | - | 9702.7 Ko |
| Bulkinsert | 1000 | 44,94 ms | N / A | - | - | - | 573,84 kb |
| Efcoreinsert | 10000 | 788,90 ms | N / A | 14000.0000 | 5000.0000 | - | 95727.38 KB |
| Bulkinsert | 10000 | 126,36 ms | N / A | - | - | - | 5320,53 kb |
| Efcoreinsert | 100000 | 7 107,29 ms | N / A | 146000.0000 | 36000.0000 | - | 950162.56 Ko |
| Bulkinsert | 100000 | 998,42 ms | N / A | 7000.0000 | 3000.0000 | 1000.0000 | 51730.81 KB |
| Efcoreinsert | 250000 | 18 542,56 ms | N / A | 365000.0000 | 87000.0000 | - | 2352262.34 kb |
| Bulkinsert | 250000 | 2 576,88 ms | N / A | 16000.0000 | 5000.0000 | 1000.0000 | 125832.63 kb |
| Efcoreinsert | 500000 | 34 957,34 ms | N / A | 730000.0000 | 170000.0000 | - | 4711772.88 kb |
| Bulkinsert | 500000 | 5 553,61 ms | N / A | 30000.0000 | 9000.0000 | 1000.0000 | 252707.77 KB |
Plusieurs tables (1x lignes parent + 5x lignes enfants) /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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| Efcoreinsert | 100 | 226.22 ms | N / A | 1000.0000 | - | - | 7438.51 kb |
| Bulkinsert | 100 | 48,38 ms | N / A | - | - | - | 444.18 Ko |
| Efcoreinsert | 1000 | 566,95 ms | N / A | 11000.0000 | 4000.0000 | - | 73518.48 Ko |
| Bulkinsert | 1000 | 125,77 ms | N / A | - | - | - | 3460.21 kb |
| Efcoreinsert | 10000 | 6 268,42 ms | N / A | 114000.0000 | 30000.0000 | - | 731076.92 Ko |
| Bulkinsert | 10000 | 1 066,74 ms | N / A | 5000.0000 | 2000.0000 | 1000.0000 | 33324.16 kb |
| Efcoreinsert | 100000 | 59 389,89 ms | N / A | 1138000.0000 | 264000.0000 | - | 7282561.93 Ko |
| Bulkinsert | 100000 | 9 504,12 ms | N / A | 39000.0000 | 13000.0000 | 1000.0000 | 327100.08 KB |
/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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| Efcoreupdate | 100 | 61,65 ms | N / A | - | - | 853,66 kb |
| Bulkupdate | 100 | 27,33 ms | N / A | - | - | 63,55 Ko |
| Efcoreupdate | 1000 | 143,39 ms | N / A | 1000.0000 | - | 8398.1 Ko |
| Bulkupdate | 1000 | 43,95 ms | N / A | - | - | 379.25 Ko |
| Efcoreupdate | 10000 | 685,97 ms | N / A | 12000.0000 | 3000.0000 | 82396.19 kb |
| Bulkupdate | 10000 | 182,54 ms | N / A | - | - | 3499.74 Ko |
| Efcoreupdate | 100000 | 8 495,18 ms | N / A | 120000.0000 | 28000.0000 | 810248.07 KB |
| Bulkupdate | 100000 | 2 091,42 ms | N / A | 5000.0000 | 1000.0000 | 33819.46 kb |
| Efcoreupdate | 250000 | 17 859,49 ms | N / A | 300000.0000 | 69000.0000 | 2005895.77 Ko |
| Bulkupdate | 250000 | 4 290,07 ms | N / A | 13000.0000 | 7000.0000 | 84352 kb |
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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| Bulkupdate | 500000 | 10.19 s | N / A | 27000.0000 | 16000.0000 | 164,63 Mb |
| Bulkupdate | 1000000 | 17.03 s | N / A | 54000.0000 | 37000.0000 | 329.12 Mb |
/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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| EfCoredelete | 100 | 73,25 ms | N / A | - | - | 681.09 kb |
| Bulkdelete | 100 | 29.42 ms | N / A | - | - | 43,45 Ko |
| EfCoredelete | 1000 | 176,83 ms | N / A | 1000.0000 | 1000.0000 | 6745 Ko |
| Bulkdelete | 1000 | 27.19 MS | N / A | - | - | 236,86 Ko |
| EfCoredelete | 10000 | 1 489,03 ms | N / A | 10000.0000 | 2000.0000 | 66031.55 Ko |
| Bulkdelete | 10000 | 431,74 ms | N / A | - | - | 2150,99 Ko |
| EfCoredelete | 20000 | 6 084,87 ms | N / A | 20000.0000 | 7000.0000 | 132403.3 Ko |
| Bulkdelete | 20000 | 276,52 ms | N / A | - | - | 4276.01 kb |
| EfCoredelete | 50000 | 39 933,60 ms | N / A | 49000.0000 | 14000.0000 | 326164.25 Ko |
| Bulkdelete | 50000 | 1 477,09 ms | N / A | 1000.0000 | - | 10594.63 Ko |
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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| Bulkdelete | 100000 | 937,7 ms | N / A | 3000.0000 | 1000.0000 | 20,67 Mb |
| Bulkdelete | 250000 | 2 619,7 ms | N / A | 7000.0000 | 3000.0000 | 51,7 Mb |
| Bulkdelete | 500000 | 4 897,7 ms | N / A | 13000.0000 | 6000.0000 | 103,22 Mb |
| Bulkdelete | 1000000 | 9 466,0 ms | N / A | 26000.0000 | 12000.0000 | 206,28 Mo |
/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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| Efcoreupsert | 100 | 82.11 ms | N / A | - | - | - | 1840.23 Ko |
| Bulkmerge | 100 | 34,27 ms | N / A | - | - | - | 162.96 Ko |
| Efcoreupsert | 1000 | 266,86 ms | N / A | 2000.0000 | 1000.0000 | - | 17984.91 kb |
| Bulkmerge | 1000 | 79,45 ms | N / A | - | - | - | 1213.33 Ko |
| Efcoreupsert | 10000 | 1 451,20 ms | N / A | 26000.0000 | 8000.0000 | - | 178385.15 kb |
| Bulkmerge | 10000 | 677,47 ms | N / A | 1000.0000 | - | - | 11679.42 kb |
| Efcoreupsert | 100000 | 13 902,06 ms | N / A | 266000.0000 | 63000.0000 | - | 1762696.52 Ko |
| Bulkmerge | 100000 | 3 415,31 ms | N / A | 16000.0000 | 6000.0000 | 1000.0000 | 115233.2 kb |
| Efcoreupsert | 250000 | 36 167,51 ms | N / A | 665000.0000 | 152000.0000 | - | 4362872.57 Ko |
| Bulkmerge | 250000 | 7 681,71 ms | N / A | 37000.0000 | 11000.0000 | 1000.0000 | 284187.09 kb |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/bulkmergereTurDBGeneratedBenchmarks.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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| ReturnDBGenerated | 100 | 38,45 ms | N / A | - | - | - | 151.09 kb |
| Notreturndbgenerated | 100 | 37,75 ms | N / A | - | - | - | 116,8 Ko |
| ReturnDBGenerated | 1000 | 67,42 ms | N / A | - | - | - | 1099.48 Ko |
| Notreturndbgenerated | 1000 | 60,02 ms | N / A | - | - | - | 769.23 Ko |
| ReturnDBGenerated | 10000 | 783,73 ms | N / A | 1000.0000 | - | - | 10543,62 Ko |
| Notreturndbgenerated | 10000 | 501.07 MS | N / A | 1000.0000 | - | - | 7348,79 kb |
| ReturnDBGenerated | 100000 | 3 187,89 ms | N / A | 14000.0000 | 5000.0000 | 1000.0000 | 103878.09 kb |
| Notreturndbgenerated | 100000 | 2 741,31 ms | N / A | 11000.0000 | 5000.0000 | 1000.0000 | 72936.01 kb |
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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| ReturnDBGenerated | 250000 | 7.799 s | N / A | 32000.0000 | 8000.0000 | - | 249,8 MB |
| Notreturndbgenerated | 250000 | 6.619 s | N / A | 24000.0000 | 7000.0000 | - | 177,7 Mb |
| ReturnDBGenerated | 500000 | 15.051 s | N / A | 66000.0000 | 19000.0000 | 1000.0000 | 500,64 Mo |
| Notreturndbgenerated | 500000 | 14.328 s | N / A | 47000.0000 | 14000.0000 | - | 355,19 MB |
| ReturnDBGenerated | 1000000 | 32.449 s | N / A | 129000.0000 | 34000.0000 | - | 1003,67 Mo |
| Notreturndbgenerated | 1000000 | 28.253 s | N / A | 95000.0000 | 28000.0000 | - | 710,22 Mb |
Single colonne /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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| Efcoréselect | 100 | 97.373 MS | N / A | - | - | - | 1008,33 kb |
| EfCoreBatchSelect | 100 | 7.166 ms | N / A | - | - | - | 94,77 Ko |
| Bulkmatch | 100 | 8,570 ms | N / A | - | - | - | 106,63 Ko |
| Efcoréselect | 1000 | 720,250 ms | N / A | 1000.0000 | - | - | 9761,42 kb |
| EfCoreBatchSelect | 1000 | 6,375 ms | N / A | - | - | - | 908.18 kb |
| Bulkmatch | 1000 | 15.445 ms | N / A | - | - | - | 820,36 kb |
| Efcoréselect | 10000 | 8 075,686 ms | N / A | 15000.0000 | 1000.0000 | - | 97115.62 kb |
| EfCoreBatchSelect | 10000 | 66.438 MS | N / A | 1000.0000 | - | - | 9092.91 kb |
| Bulkmatch | 10000 | 69.430 ms | N / A | 1000.0000 | - | - | 8177,76 kb |
| Efcoréselect | 100000 | 81 088,718 MS | N / A | 159000.0000 | 31000.0000 | 1000.0000 | 972204.7 Ko |
| EfCoreBatchSelect | 100000 | 920.412 MS | N / A | 11000.0000 | 4000.0000 | 1000.0000 | 91808.56 kb |
| Bulkmatch | 100000 | 742.030 ms | N / A | 13000.0000 | 6000.0000 | 1000.0000 | 82419.43 kb |
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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| EfCoreBatchSelect | 250000 | 2.101 S | N / A | 26000.0000 | 11000.0000 | 1000.0000 | 224.05 MB |
| Bulkmatch | 250000 | 2.067 s | N / A | 32000.0000 | 12000.0000 | 1000.0000 | 201,64 MB |
| EfCoreBatchSelect | 500000 | 4.239 s | N / A | 53000.0000 | 20000.0000 | 2000.0000 | 448,85 Mb |
| Bulkmatch | 500000 | 4,507 s | N / A | 62000.0000 | 24000.0000 | 1000.0000 | 404.03 MB |
| EfCoreBatchSelect | 1000000 | 8.523 s | N / A | 103000.0000 | 38000.0000 | 1000.0000 | 898,44 MB |
| Bulkmatch | 1000000 | 11.585 s | N / A | 123000.0000 | 46000.0000 | 1000.0000 | 808,82 Mb |
Plusieurs colonnes /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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| Efcoréselect | 100 | 130,11 ms | N / A | - | - | 1256,8 Ko |
| Bulkmatch | 100 | 15,46 ms | N / A | - | - | 173,56 Ko |
| Efcoréselect | 1000 | 997,87 ms | N / A | 2000.0000 | - | 12373,85 Ko |
| Bulkmatch | 1000 | 43,35 ms | N / A | - | - | 1358,77 kb |
| Efcoréselect | 10000 | 9 769,96 ms | N / A | 20000.0000 | 4000.0000 | 123595.97 Ko |
| Bulkmatch | 10000 | 238,80 ms | N / A | 2000.0000 | 1000.0000 | 13768,49 kb |
| Efcoréselect | 100000 | 89 204,16 ms | N / A | 201000.0000 | 51000.0000 | 1237424.23 Ko |
| Bulkmatch | 100000 | 2 612,00 ms | N / A | 21000.0000 | 8000.0000 | 138686.52 Ko |
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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Alloué |
|---|---|---|---|---|---|---|
| Bulkmatch | 250000 | 6.709 s | N / A | 53000.0000 | 19000.0000 | 340,68 Mb |
| Bulkmatch | 500000 | 12.939 s | N / A | 107000.0000 | 36000.0000 | 683,46 MB |
| Bulkmatch | 1000000 | 25.418 s | N / A | 214000.0000 | 74000.0000 | 1369.34 MB |
/src/entityframeworkcore.sqlserver.simplebulks.benchmarks/empablebenchmarks.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
| Méthode | Pays de ligne | Signifier | Erreur | Gen0 | Gen1 | Gen2 | Alloué |
|---|---|---|---|---|---|---|---|
| Créatible créatible | 100 | 7,639 ms | N / A | - | - | - | 68,03 kb |
| Créatible créatible | 1000 | 14.077 MS | N / A | - | - | - | 373,76 Ko |
| Créatible créatible | 10000 | 89,789 ms | N / A | - | - | - | 3455.46 Ko |
| Créatible créatible | 100000 | 574.937 MS | N / A | 4000.0000 | 1000.0000 | - | 34081,95 kb |
| Créatible créatible | 250000 | 1 403,071 ms | N / A | 12000.0000 | 5000.0000 | 1000.0000 | 85229.91 Ko |
| Créatible créatible | 500000 | 2 838,562 ms | N / A | 22000.0000 | 8000.0000 | 1000.0000 | 170241,85 kb |
| Créatible créatible | 1000000 | 6,198,206 ms | N / A | 43000.0000 | 14000.0000 | 1000.0000 | 340282.7 Ko |
EntityFrameWorkcore.SqlServer.Simplebulks est sous licence MIT.