update

28810
2019-12-21 16:44:05 +08:00
parent 52f9a179b0
commit adb66c5070
2 changed files with 57 additions and 2 deletions

@@ -1,6 +1,60 @@
FreeSql实现了强大功能的同时性能没有受到影响项目中使用反射或耗时的操作都经过了缓存处理。读取数据部分采用了ExpressionTree使得FreeSql解析实体数据的速度与Dapper非常接近。
## 测试代码
# 插入测试
### 测试结果(52个字段)
| | 18W+52C | 1W+52C | 5K+52C | 2K+52C | 1K+52C | 500+52C | 100+52C | 50+52C |
| -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |
| MySql 5.5 ExecuteAffrows | 55,497ms | 4,953ms | 2,304ms | 2,554ms | 1,516ms | 1,572ms | 265ms | 184ms |
| SqlServer Express ExecuteAffrows | 402,355ms | 24,847ms | 11,465ms | 4,971ms | 2,437ms | 915ms | 138ms | 88ms |
| SqlServer Express ExecuteSqlBulkCopy | 21,065ms | 578ms | 326ms | 139ms | 105ms | 79ms | 60ms | 48ms |
| PostgreSQL 10 ExecuteAffrows | 46,756ms | 3,294ms | 2,269ms | 1,019ms | 374ms | 209ms | 51ms | 37ms |
| PostgreSQL 10 ExecutePgCopy | 10,090ms | 583ms | 337ms | 136ms | 88ms | 61ms | 30ms | 25ms |
| Oracle XE ExecuteAffrows | - | - | - | - | 24,528 | 10,648ms | 571ms | 200ms |
| Sqlite ExecuteAffrows | 28,554ms | 1,149ms | 701ms | 327ms | 155ms | 91ms | 44ms | 35ms |
> 18W+52C 解释插入18万行记录表字段有52个
> Oracle 插入性能不用怀疑,可能安装学生版限制较大
提醒:开源数据库测试结果比较有意义,商业数据库版本之间性能可能有较大差距
### 测试结果(10个字段)
| | 18W+10C | 1W+10C | 5K+10C | 2K+10C | 1K+10C | 500+10C | 100+10C | 50+10C |
| -- | -- | -- | -- | -- | -- | -- | -- | -- |
| MySql 5.5 ExecuteAffrows | 15,380ms | 1,813ms | 1,457ms | 1,254ms | 563ms | 246ms | 55ms | 21ms |
| SqlServer Express ExecuteAffrows | 47,204ms | 2,275ms | 1,108ms | 488ms | 279ms | 123ms | 35ms | 16ms |
| SqlServer Express ExecuteSqlBulkCopy | 4,248ms | 127ms | 71ms | 30ms | 48ms | 14ms | 11ms | 10ms |
| PostgreSQL 10 ExecuteAffrows | 9,786ms | 568ms | 336ms | 157ms | 102ms | 34ms | 9ms | 6ms |
| PostgreSQL 10 ExecutePgCopy | 4,081ms | 167ms | 93ms | 39ms | 21ms | 12ms | 4ms | 2ms |
| Oracle XE ExecuteAffrows | - | - | - | - | 2,394 | 731ms | 67ms | 33ms |
| Sqlite ExecuteAffrows | 4,524ms | 246ms | 137ms | 94ms | 35ms | 19ms | 14ms | 11ms |
> 测试结果,是在相同操作系统下进行的,并且都有预热
```csharp
public class TestInsert10c
{
[Column(MapType = typeof(string))]
public Guid Id { get; set; }
public string UserName0 { get; set; }
public string PassWord0 { get; set; }
public DateTime CreateTime0 { get; set; }
public string UserName1 { get; set; }
public string PassWord1 { get; set; }
public DateTime CreateTime1 { get; set; }
public string UserName2 { get; set; }
public string PassWord2 { get; set; }
public DateTime CreateTime2 { get; set; }
}
```
# 查询测试
```csharp
IFreeSql mysql = new FreeSql.FreeSqlBuilder()
@@ -21,7 +75,7 @@ class Song {
测试方法:运行两次,以第二次性能报告,避免了首个运行慢不公平的情况。
## 测试结果
### 测试结果
| | 数量 | Query\<Class\> | Query\<Tuple\> | Query\<dynamic\> |
| - | - | - | - | - |

@@ -16,6 +16,7 @@
- 增加 IInsert/IUpdate BatchOptions 方法指定批量插入的设置;
- 增加 IInsert.ToDataTable 方法,为 BulkCopy 操作提供数据,该方法处理了(表名、字段名、类型)映射和忽略列;
- 增加 IInsert.ExecuteSqlBulkCopy 扩展方法执行 SqlBulkCopy 批量插入,在 FreeSql.Provider.SqlServer 可用;
- 增加 IInsert.ExecutePgCopy 扩展方法执行 PostgreSQL Copy 批量导入,在 FreeSql.Provider.PostgreSQL 可用;
## v0.12.21