Comparisons.SQLiteVSDoublets (русская версия)
Comparison of SQLite and LinksPlatform's Doublets (links) on basic embeded database operations with objects (create list, read list, delete list).
Based on examples from https://github.com/FahaoTang/dotnetcore-examples and https://github.com/Konard/LinksPlatform
usingSystem.Linq;usingComparisons.SQLiteVSDoublets.Model;namespaceComparisons.SQLiteVSDoublets.SQLite{publicclassSQLiteTestRun:TestRun{publicSQLiteTestRun(stringdbFilename):base(dbFilename){}publicoverridevoidPrepare(){usingvardbContext=newSQLiteDbContext(DbFilename);dbContext.Database.EnsureCreated();}publicoverridevoidCreateList(){usingvardbContext=newSQLiteDbContext(DbFilename);dbContext.BlogPosts.AddRange(BlogPosts.List);dbContext.SaveChanges();}publicoverridevoidReadList(){usingvardbContext=newSQLiteDbContext(DbFilename);foreach(varblogPostindbContext.BlogPosts){ReadBlogPosts.Add(blogPost);}}publicoverridevoidDeleteList(){usingvardbContext=newSQLiteDbContext(DbFilename);varblogPostsToDelete=dbContext.BlogPosts.ToList();dbContext.BlogPosts.RemoveRange(blogPostsToDelete);dbContext.SaveChanges();}}}usingSystem.IO;usingPlatform.IO;usingComparisons.SQLiteVSDoublets.Model;namespaceComparisons.SQLiteVSDoublets.Doublets{publicclassDoubletsTestRun:TestRun{publicstringDbIndexFilename{get;}publicDoubletsTestRun(stringdbFilename):base(dbFilename)=>DbIndexFilename=$"{Path.GetFileNameWithoutExtension(dbFilename)}.links.index";publicoverridevoidPrepare(){usingvardbContext=newDoubletsDbContext(DbFilename,DbIndexFilename);}publicoverridevoidCreateList(){usingvardbContext=newDoubletsDbContext(DbFilename,DbIndexFilename);foreach(varblogPostinBlogPosts.List){dbContext.SaveBlogPost(blogPost);}}publicoverridevoidReadList(){usingvardbContext=newDoubletsDbContext(DbFilename,DbIndexFilename);foreach(varblogPostindbContext.BlogPosts){ReadBlogPosts.Add(blogPost);}}publicoverridevoidDeleteList(){usingvardbContext=newDoubletsDbContext(DbFilename,DbIndexFilename);varblogPostsToDelete=dbContext.BlogPosts;foreach(varblogPostinblogPostsToDelete){dbContext.Delete((uint)blogPost.Id);}}protectedoverridevoidDeleteDatabase(){File.Delete(DbFilename);File.Delete(DbIndexFilename);}protectedoverridelongGetDatabaseSizeInBytes()=>FileHelpers.GetSize(DbFilename)+FileHelpers.GetSize(DbIndexFilename);}}BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18362
Intel Core i7-6700K CPU 4.00GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=3.0.100
[Host] : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
Job-AYEMIX : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
InvocationCount=1 IterationCount=1 UnrollFactor=1 WarmupCount=2 | Method | N | Mean | Error | Gen 0 | Gen 1 | Gen 2 | Allocated | SizeAfterCreation |
|---|---|---|---|---|---|---|---|---|
| SQLite | 1000 | 719.1 ms | NA | 5000.0000 | - | - | 30.67 MB | 925696 |
| Doublets | 1000 | 145.0 ms | NA | 34000.0000 | 1000.0000 | - | 139.37 MB | 767616 |
| SQLite | 10000 | 2,770.3 ms | NA | 64000.0000 | 19000.0000 | - | 315.71 MB | 9056256 |
| Doublets | 10000 | 1,003.8 ms | NA | 304000.0000 | 31000.0000 | - | 1220.55 MB | 6528256 |
| SQLite | 100000 | 35,853.8 ms | NA | 680000.0000 | 151000.0000 | - | 3234.09 MB | 90890240 |
| Doublets | 100000 | 13,083.4 ms | NA | 3088000.0000 | 328000.0000 | - | 12356.33 MB | 64192256 |
In this particular comparison, Doublets are faster and use less memory on disk, but this comes with the cost of additional use of RAM (Sqlite uses it less).



