测试结果(10个字段,18W-50行数据,单位ms):
18W 1W 5K 500 50MySql 5.5 ExecuteAffrows 11,171 866 366 50 34
MySql 5.5 ExecuteMySqlBulkCopy 6,504 399 257 100 16
SqlServer Express ExecuteAffrows 47,204 2,275 1,108 123 16
SqlServer Express ExecuteSqlBulkCopy 4,248 127 71 14 10
PostgreSQL 10 ExecuteAffrows 9,786 568 336 34 6
PostgreSQL 10 ExecutePgCopy 4,081 167 93 12 2
Oracle XE ExecuteAffrows - - - 731 33
Sqlite ExecuteAffrows 4,524 246 137 19 11
测试结果,是在相同操作系统下进行的,并且都有预热
ExecuteMySqlBulkCopy 方法在 FreeSql.Provider.MySqlConnector 中实现的
十、Sqlite :memory: 内存模式了解 EFCore 应该知道有一个 inMemory 实现,Sqlite 其实也有内存模式,所以在非常棒(忍不住)的 FreeSql.Provider.Sqlite 稍加适配就可以实现 inMemory 模式了。
使用 inMemory 模式非常简单,只需要修改 IFreeSql 创建的类型,以及连接字符串即可:
static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, "Data Source=:memory:") .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); //请务必定义成 Singleton 单例模式内存模式 + FreeSql CodeFirst 功能,用起来体验还是不错的。因为每次都要迁移结构,fsql 释放数据就没了。
终于写完了终于写完了,这篇文章是我有史以来编辑最长时间的,历时 4小时!!!原本我可以利用这 4小时编写一堆胶水代码,却非要写推广的文章,真心希望正在使用的、善良的您能动一动小手指,把文章转发一下,让更多人知道 .NET 有这样一个好用的 ORM 存在。谢谢了!!
FreeSql 开源协议 MIT https://github.com/dotnetcore/FreeSql,可以商用,文档齐全。QQ开发群:4336577
CSRedisCore 说:FreeSql 的待遇也好太多了。