吵吵   2014-03-25  阅读:1,740

早起第十天,看看能否坚持一个月。

转到c#平台了,首先研究的就是怎么连接和操作数据库。

在delphi下,我是用一个ADOConnection的全局变量来实现数据库的连接的。为什么用一个全局变量?因为不想多次去连接数据库,这样子时间和资源都会有消耗。

在C#中没有全局变量这个概念!!只有类和属性,你要不把一个类的属性变成静态的,这样子你就可以直接访问它,但是也要通过类来操作。

我下载了几个c#与sql server编写的管理系统,发现这些系统都是每次都重新new SqlConnection,这是怎么回事?难道他们不担心重复连接要消耗很多时间么。

因为有主窗口存在的关系,我后来想到一个方法,就是在主窗口中定义一个SqlConnection,然后建立其它生成其它窗口的时候,将这个SqlConnection的实例作为一个参数传递过去。因为主窗口实际上是最顶层的,其它窗口都是它的局部变量,所以这种方式间接的实现了只用一个数据库连接来操作数据库的方法。

正当我高兴窃喜的时候,我找到了一个概念SqlConnection- Pooling这个概念,连接池技术。

连接池

这是个啥玩意呢,百度一下:

当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。

连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。对 Connection 调用 Close 或 Dispose 时,连接被释放回池中,而跟数据库的物理连接并没有断掉。连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。

连接字符串中,有Pooling这个关键字,默认情况下,其值为true,即支持连接池技术。如果不想支持连接池技术,可以显式地将其赋值为false.另外Max Pool Size, Min Pool Size为池允许的最大和最小连接数。

这个概念就是原来你每new SqlConnection都只是连接池里面的一个,c#客户度程序去连接数据库,会只有一个物理连接,但是可以有多个虚拟的连接,这就是连接池的概念。

这个时候你该知道为什么很多程序第一次连接很慢,而之后new SqlConnection都连接很快呢,这就是所谓的连接池技术了。

看来我又犯二了,人家早就有比较好的解决方案,我还在苦苦找自以为是的方法呢。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注