使用了dottrace跟踪,使用了自己的持久层框架。
插入总数100条,循环10次。
测试分类:每条数据单独插入、100条数据一次开链接插入、开事务插入。
测试结果:
all
Time Elapsed: 25,089ms AVERAGE: 2.5 SEC
CPU time: 515,625,000ns
Gen 0: 29
Gen 1: 3
Gen 2: 0
single
Time Elapsed: 33,095ms AVERAGE:3.3 SEC
CPU time: 4,062,500,000ns
Gen 0: 195
Gen 1: 33
Gen 2: 0
transaction
Time Elapsed: 1,560ms AVERAGE: 0.15 SEC
CPU time: 1,015,625,000ns
Gen 0: 111
Gen 1: 3
Gen 2: 0
Proflier:
明细:
这里说明了,
TOTAL: 85,000 ms
1. 性能损失有1.16%在获取表结构:这里最伤性能是在:Pixysoft.EnumCoder.ToEnum(string) 0.47% = 667ms
2. GetAutoInsertSting 损失了 0.86% = 1.225ms
3. NoebeParameterCollection.add = 964ms
4. NoebeParameterCollection.AddType = 1.004 ms
5. Pixysoft.SQLCoder.Hasparameter = 1.097ms
6. MYSQlClient.connection.open = 46.754ms
7. MySQLClient.Command.ExecuteNonQuery = 26.345ms
Java操作相同的数据库性能报告:
自定义主键插入测试
数据压力(条) |
Hibernate |
Pure JDBC |
JDBC Framework BATCH |
100 |
1742.2 |
1698.4 |
53.4 |
300 |
5065.6 |
5092.2 |
107.6 |
500 |
8487.5 |
8450 |
145.5 |
1000 |
17131.3 |
17132.8 |
233 |
这里说明了dotnet的驱动很有问题,比java慢了1倍!!!
表结构:
//Table Create Table
//----------- ---------------------------------------------
//tc_manualpk CREATE TABLE `tc_manualpk` (
// `COL_PK` int(11) NOT NULL AUTO_INCREMENT,
// `COL_VARCHAR1` varchar(255) DEFAULT NULL,
// `COL_VARCHAR2` varchar(255) DEFAULT NULL,
// `COL_VARCHAR3` varchar(255) DEFAULT NULL,
// `COL_VARCHAR4` varchar(255) DEFAULT NULL,
// `COL_DATETIME1` datetime DEFAULT NULL,
// `COL_DATETIME2` datetime DEFAULT NULL,
// `COL_INT1` int(11) DEFAULT NULL,
// `COL_INT2` int(11) DEFAULT NULL,
// `COL_DOUBLE1` double DEFAULT NULL,
// `COL_DOUBLE2` double DEFAULT NULL,
// `COL_BLOB` blob,
// `COL_INDEX` varchar(255) DEFAULT NULL,
// PRIMARY KEY (`COL_PK`),
// KEY `NewIndex1` (`COL_INDEX`)
// ) ENGINE=InnoDB DEFAULT CHARSET=utf8