做一下mssql的连接,和赋值的测试

机器环境:

 

 

前言

最近实体框架很流行,不过缺点也多,我列一下:

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,客户要求,没办法的事)

 

 

结果如下:

测试用连接池与不用连接池开关连接所用时间:

------------------------------------------------

次数连接池不用连接池
100000:00:00.078125000:00:03.0156250
200000:00:0000:00:05.9531250
300000:00:00.0156250连接出错
400000:00:00.0312500连接出错
500000:00:00.0312500连接出错
600000:00:00.0468750连接出错
700000:00:00.0468750连接出错
800000:00:00.0468750连接出错
900000:00:00.0468750连接出错
1000000:00:00.0625000连接出错
1100000:00:00.0625000连接出错
1200000:00:00.0625000连接出错
1300000:00:00.0781250连接出错
1400000:00:00.1093750连接出错
1500000:00:00.0937500连接出错
1600000:00:00.0937500连接出错
1700000:00:00.0937500连接出错
1800000:00:00.0937500连接出错
1900000:00:00.0937500连接出错
2000000:00:00.1093750连接出错

------------------------------------------------

------------------------------------------------

------------------------------------------------

测试字符串判断赋值与直接赋值时间比较

------------------------------------------------

次数判断赋值赋值
100000:00:0000:00:00
200000:00:0000:00:00.0156250
300000:00:00.015625000:00:00
400000:00:00.015625000:00:00.0156250
500000:00:0000:00:00
600000:00:00.031250000:00:00.0156250
700000:00:00.015625000:00:00.0156250
800000:00:00.015625000:00:00.0156250
900000:00:00.031250000:00:00.0312500
1000000:00:00.015625000:00:00.0468750
1100000:00:00.031250000:00:00.0312500
1200000:00:00.031250000:00:00.0312500
1300000:00:00.031250000:00:00.0156250
1400000:00:00.031250000:00:00.0156250
1500000:00:00.031250000:00:00.0312500
1600000:00:00.031250000:00:00.0468750
1700000:00:00.031250000:00:00.0312500
1800000:00:00.093750000:00:00.0625000
1900000:00:00.078125000:00:00.0468750
2000000:00:00.062500000:00:00.0625000
2100000:00:00.078125000:00:00.0468750
2200000:00:00.078125000:00:00.0312500
2300000:00:00.046875000:00:00.0781250
2400000:00:00.062500000:00:00.0937500
2500000:00:00.046875000:00:00.0625000
2600000:00:00.093750000:00:00.0781250
2700000:00:00.078125000:00:00.0937500
2800000:00:00.078125000:00:00.0781250
2900000:00:00.078125000:00:00.0937500
3000000:00:00.093750000:00:00.0937500
3100000:00:00.156250000:00:00.0625000
3200000:00:00.125000000:00:00.0781250
3300000:00:00.093750000:00:00.1093750
3400000:00:00.093750000:00:00.0781250
3500000:00:00.156250000:00:00.0937500
3600000:00:00.109375000:00:00.0937500
3700000:00:00.125000000:00:00.0781250
3800000:00:00.109375000:00:00.1093750
3900000:00:00.140625000:00:00.1250000
4000000:00:00.171875000:00:00.0781250
4100000:00:00.125000000:00:00.0937500
4200000:00:00.125000000:00:00.1718750
4300000:00:00.125000000:00:00.1718750
4400000:00:00.125000000:00:00.1718750
4500000:00:00.125000000:00:00.1093750
4600000:00:00.203125000:00:00.1093750
4700000:00:00.203125000:00:00.1093750
4800000:00:00.156250000:00:00.1406250
4900000:00:00.171875000:00:00.1093750
5000000:00:00.218750000:00:00.1250000
5100000:00:00.140625000:00:00.2031250
5200000:00:00.140625000:00:00.1250000
5300000:00:00.156250000:00:00.1562500
5400000:00:00.171875000:00:00.1250000
5500000:00:00.187500000:00:00.1250000
5600000:00:00.156250000:00:00.1562500
5700000:00:00.156250000:00:00.1718750
5800000:00:00.171875000:00:00.1250000
5900000:00:00.187500000:00:00.2031250
6000000:00:00.187500000:00:00.1562500
6100000:00:00.171875000:00:00.1875000
6200000:00:00.203125000:00:00.1562500
6300000:00:00.234375000:00:00.1875000
6400000:00:00.203125000:00:00.2031250
6500000:00:00.265625000:00:00.1562500
6600000:00:00.203125000:00:00.1718750
6700000:00:00.203125000:00:00.2187500
6800000:00:00.281250000:00:00.1562500
6900000:00:00.218750000:00:00.2031250
7000000:00:00.218750000:00:00.2500000
7100000:00:00.234375000:00:00.2812500
7200000:00:00.250000000:00:00.2031250
7300000:00:00.281250000:00:00.2812500
7400000:00:00.234375000:00:00.2031250
7500000:00:00.250000000:00:00.1875000
7600000:00:00.265625000:00:00.2656250
7700000:00:00.296875000:00:00.2187500
7800000:00:00.234375000:00:00.2656250
7900000:00:00.281250000:00:00.2031250
8000000:00:00.281250000:00:00.2968750
8100000:00:00.328125000:00:00.2343750
8200000:00:00.343750000:00:00.2187500
8300000:00:00.296875000:00:00.2031250
8400000:00:00.296875000:00:00.2343750
8500000:00:00.250000000:00:00.2968750
8600000:00:00.328125000:00:00.2500000
8700000:00:00.328125000:00:00.2812500
8800000:00:00.312500000:00:00.2187500
8900000:00:00.312500000:00:00.2187500
9000000:00:00.343750000:00:00.2812500
9100000:00:00.328125000:00:00.2656250
9200000:00:00.406250000:00:00.3593750
9300000:00:00.328125000:00:00.2656250
9400000:00:00.296875000:00:00.2812500
9500000:00:00.390625000:00:00.3437500
9600000:00:00.390625000:00:00.2656250
9700000:00:00.359375000:00:00.3125000
9800000:00:00.343750000:00:00.2968750
9900000:00:00.390625000:00:00.2656250
10000000:00:00.328125000:00:00.2656250

------------------------------------------------

 

就上面来看,我可以得出结论了:

1.DAL不用共享连接,因为开关连接的时间太短可以忽略不计

2.用代码生成的方式生成索引器的代码,然后从dr拿值时,直接while(reader.Read()),再加一循环来拿值就行

 

因为对比的时间,相差也不大,那1ms,10万次的赋值,不算什么。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值