机器环境:

前言
最近实体框架很流行,不过缺点也多,我列一下:
1.不支持sql2000
2.增删改很麻烦,增加,带多个外键的,要查数据库,修改与删除也要查,这样对性能影响大打折扣,而且编码也麻烦,至少比代码生成麻烦
3.linq to entity中,有些语句是不支持的,如intArr.Contains等方法,必需用e-sql query.Where("it.ID IN {1,2,3,4}")才行
4.要支持外键值的话,要用ef2.0,即是.net4.0的平台,.net4.0太庞大了,近两三年应该也用不起来。
所以我还是用普通的ado.net算了。时间很紧迫,项目很乱,而且我还只有一个星期对住一堆超乱的代码进行重构,还不知做不做得来。所以为了解决这个难题,要一步一步验证自己未能确定的问题。
现在我的思路是,代码效率+性能+维护方便
如果牺牲10%-20%的性能,能增加1-2倍的生产效率的话,那我很乐意去做。
ef1.0,好像在100万条数据的情况下,不能满足吧。这种查法,不过现在放弃使用,就暂不做相关的测试了。
正题
最近在研究属于自己的架构,所以有必要做一下这方面的性能测试
主要有两个问题要搞清楚
1.在DAL层里,是否需要共用一个Connection?
2.在赋值过程中,能否通过一个规范来实现接口,然后拿数据,像DataReader赋值的操作,用循环就搞店,不用一行一行属性来赋值。
所以就有两个问题
1.用连接池开关连接与不用连接池开关连接,时间上有多大差异?
2.用索引器的方式赋值,与普通手写代码赋值,时间上又有多大差异?
于是模拟最实际的环境(我想是挺实际的)就用以下在代码来做测试:
是一个控制台应用程序,连接sql2005数据库(开始向sql2005转了,不过现在还在用sql2000,客户要求,没办法的事)
结果如下:
测试用连接池与不用连接池开关连接所用时间:
------------------------------------------------
| 次数 | 连接池 | 不用连接池 |
| 1000 | 00:00:00.0781250 | 00:00:03.0156250 |
| 2000 | 00:00:00 | 00:00:05.9531250 |
| 3000 | 00:00:00.0156250 | 连接出错 |
| 4000 | 00:00:00.0312500 | 连接出错 |
| 5000 | 00:00:00.0312500 | 连接出错 |
| 6000 | 00:00:00.0468750 | 连接出错 |
| 7000 | 00:00:00.0468750 | 连接出错 |
| 8000 | 00:00:00.0468750 | 连接出错 |
| 9000 | 00:00:00.0468750 | 连接出错 |
| 10000 | 00:00:00.0625000 | 连接出错 |
| 11000 | 00:00:00.0625000 | 连接出错 |
| 12000 | 00:00:00.0625000 | 连接出错 |
| 13000 | 00:00:00.0781250 | 连接出错 |
| 14000 | 00:00:00.1093750 | 连接出错 |
| 15000 | 00:00:00.0937500 | 连接出错 |
| 16000 | 00:00:00.0937500 | 连接出错 |
| 17000 | 00:00:00.0937500 | 连接出错 |
| 18000 | 00:00:00.0937500 | 连接出错 |
| 19000 | 00:00:00.0937500 | 连接出错 |
| 20000 | 00:00:00.1093750 | 连接出错 |
------------------------------------------------
------------------------------------------------
------------------------------------------------
测试字符串判断赋值与直接赋值时间比较
------------------------------------------------
| 次数 | 判断赋值 | 赋值 |
| 1000 | 00:00:00 | 00:00:00 |
| 2000 | 00:00:00 | 00:00:00.0156250 |
| 3000 | 00:00:00.0156250 | 00:00:00 |
| 4000 | 00:00:00.0156250 | 00:00:00.0156250 |
| 5000 | 00:00:00 | 00:00:00 |
| 6000 | 00:00:00.0312500 | 00:00:00.0156250 |
| 7000 | 00:00:00.0156250 | 00:00:00.0156250 |
| 8000 | 00:00:00.0156250 | 00:00:00.0156250 |
| 9000 | 00:00:00.0312500 | 00:00:00.0312500 |
| 10000 | 00:00:00.0156250 | 00:00:00.0468750 |
| 11000 | 00:00:00.0312500 | 00:00:00.0312500 |
| 12000 | 00:00:00.0312500 | 00:00:00.0312500 |
| 13000 | 00:00:00.0312500 | 00:00:00.0156250 |
| 14000 | 00:00:00.0312500 | 00:00:00.0156250 |
| 15000 | 00:00:00.0312500 | 00:00:00.0312500 |
| 16000 | 00:00:00.0312500 | 00:00:00.0468750 |
| 17000 | 00:00:00.0312500 | 00:00:00.0312500 |
| 18000 | 00:00:00.0937500 | 00:00:00.0625000 |
| 19000 | 00:00:00.0781250 | 00:00:00.0468750 |
| 20000 | 00:00:00.0625000 | 00:00:00.0625000 |
| 21000 | 00:00:00.0781250 | 00:00:00.0468750 |
| 22000 | 00:00:00.0781250 | 00:00:00.0312500 |
| 23000 | 00:00:00.0468750 | 00:00:00.0781250 |
| 24000 | 00:00:00.0625000 | 00:00:00.0937500 |
| 25000 | 00:00:00.0468750 | 00:00:00.0625000 |
| 26000 | 00:00:00.0937500 | 00:00:00.0781250 |
| 27000 | 00:00:00.0781250 | 00:00:00.0937500 |
| 28000 | 00:00:00.0781250 | 00:00:00.0781250 |
| 29000 | 00:00:00.0781250 | 00:00:00.0937500 |
| 30000 | 00:00:00.0937500 | 00:00:00.0937500 |
| 31000 | 00:00:00.1562500 | 00:00:00.0625000 |
| 32000 | 00:00:00.1250000 | 00:00:00.0781250 |
| 33000 | 00:00:00.0937500 | 00:00:00.1093750 |
| 34000 | 00:00:00.0937500 | 00:00:00.0781250 |
| 35000 | 00:00:00.1562500 | 00:00:00.0937500 |
| 36000 | 00:00:00.1093750 | 00:00:00.0937500 |
| 37000 | 00:00:00.1250000 | 00:00:00.0781250 |
| 38000 | 00:00:00.1093750 | 00:00:00.1093750 |
| 39000 | 00:00:00.1406250 | 00:00:00.1250000 |
| 40000 | 00:00:00.1718750 | 00:00:00.0781250 |
| 41000 | 00:00:00.1250000 | 00:00:00.0937500 |
| 42000 | 00:00:00.1250000 | 00:00:00.1718750 |
| 43000 | 00:00:00.1250000 | 00:00:00.1718750 |
| 44000 | 00:00:00.1250000 | 00:00:00.1718750 |
| 45000 | 00:00:00.1250000 | 00:00:00.1093750 |
| 46000 | 00:00:00.2031250 | 00:00:00.1093750 |
| 47000 | 00:00:00.2031250 | 00:00:00.1093750 |
| 48000 | 00:00:00.1562500 | 00:00:00.1406250 |
| 49000 | 00:00:00.1718750 | 00:00:00.1093750 |
| 50000 | 00:00:00.2187500 | 00:00:00.1250000 |
| 51000 | 00:00:00.1406250 | 00:00:00.2031250 |
| 52000 | 00:00:00.1406250 | 00:00:00.1250000 |
| 53000 | 00:00:00.1562500 | 00:00:00.1562500 |
| 54000 | 00:00:00.1718750 | 00:00:00.1250000 |
| 55000 | 00:00:00.1875000 | 00:00:00.1250000 |
| 56000 | 00:00:00.1562500 | 00:00:00.1562500 |
| 57000 | 00:00:00.1562500 | 00:00:00.1718750 |
| 58000 | 00:00:00.1718750 | 00:00:00.1250000 |
| 59000 | 00:00:00.1875000 | 00:00:00.2031250 |
| 60000 | 00:00:00.1875000 | 00:00:00.1562500 |
| 61000 | 00:00:00.1718750 | 00:00:00.1875000 |
| 62000 | 00:00:00.2031250 | 00:00:00.1562500 |
| 63000 | 00:00:00.2343750 | 00:00:00.1875000 |
| 64000 | 00:00:00.2031250 | 00:00:00.2031250 |
| 65000 | 00:00:00.2656250 | 00:00:00.1562500 |
| 66000 | 00:00:00.2031250 | 00:00:00.1718750 |
| 67000 | 00:00:00.2031250 | 00:00:00.2187500 |
| 68000 | 00:00:00.2812500 | 00:00:00.1562500 |
| 69000 | 00:00:00.2187500 | 00:00:00.2031250 |
| 70000 | 00:00:00.2187500 | 00:00:00.2500000 |
| 71000 | 00:00:00.2343750 | 00:00:00.2812500 |
| 72000 | 00:00:00.2500000 | 00:00:00.2031250 |
| 73000 | 00:00:00.2812500 | 00:00:00.2812500 |
| 74000 | 00:00:00.2343750 | 00:00:00.2031250 |
| 75000 | 00:00:00.2500000 | 00:00:00.1875000 |
| 76000 | 00:00:00.2656250 | 00:00:00.2656250 |
| 77000 | 00:00:00.2968750 | 00:00:00.2187500 |
| 78000 | 00:00:00.2343750 | 00:00:00.2656250 |
| 79000 | 00:00:00.2812500 | 00:00:00.2031250 |
| 80000 | 00:00:00.2812500 | 00:00:00.2968750 |
| 81000 | 00:00:00.3281250 | 00:00:00.2343750 |
| 82000 | 00:00:00.3437500 | 00:00:00.2187500 |
| 83000 | 00:00:00.2968750 | 00:00:00.2031250 |
| 84000 | 00:00:00.2968750 | 00:00:00.2343750 |
| 85000 | 00:00:00.2500000 | 00:00:00.2968750 |
| 86000 | 00:00:00.3281250 | 00:00:00.2500000 |
| 87000 | 00:00:00.3281250 | 00:00:00.2812500 |
| 88000 | 00:00:00.3125000 | 00:00:00.2187500 |
| 89000 | 00:00:00.3125000 | 00:00:00.2187500 |
| 90000 | 00:00:00.3437500 | 00:00:00.2812500 |
| 91000 | 00:00:00.3281250 | 00:00:00.2656250 |
| 92000 | 00:00:00.4062500 | 00:00:00.3593750 |
| 93000 | 00:00:00.3281250 | 00:00:00.2656250 |
| 94000 | 00:00:00.2968750 | 00:00:00.2812500 |
| 95000 | 00:00:00.3906250 | 00:00:00.3437500 |
| 96000 | 00:00:00.3906250 | 00:00:00.2656250 |
| 97000 | 00:00:00.3593750 | 00:00:00.3125000 |
| 98000 | 00:00:00.3437500 | 00:00:00.2968750 |
| 99000 | 00:00:00.3906250 | 00:00:00.2656250 |
| 100000 | 00:00:00.3281250 | 00:00:00.2656250 |
------------------------------------------------
就上面来看,我可以得出结论了:
1.DAL不用共享连接,因为开关连接的时间太短可以忽略不计
2.用代码生成的方式生成索引器的代码,然后从dr拿值时,直接while(reader.Read()),再加一循环来拿值就行
因为对比的时间,相差也不大,那1ms,10万次的赋值,不算什么。
本文通过实验对比了在ADO.NET中使用连接池与不使用连接池的性能差异,并测试了不同赋值方式对性能的影响。
1436

被折叠的 条评论
为什么被折叠?



