数据库访问层如何优化实现高并发?
发布网友
发布时间:2022-04-20 04:36
我来回答
共1个回答
热心网友
时间:2022-04-30 09:24
数据库访问层是一个静态的单例来实现的,里面就是
conn.open();
Adapter.fill(ds);
conn.close();
之类的方法,其他通过调用这些方法来获得数据.
2:我理解的是应该只有 1 个,那么1个效率是不是太慢? 而且数据请求的是序列的还是错序的?(里面没有使用异步).
高并发也是关于连接池的
连接池就是一个线程.维护了连接的一个队列
对于一个连接字符串.默认的连接池是打开,并且默认最大值是 100个
如果Close之后这个连接其实是保持在连接池中,并没有立既销毁,
而是下一个 new Connection().Open()
的时候直接使用的
对于同样的连接字符串,如果再来一个数据连接请求,最大值没有达到 100,
那么,会创建一个连接,如果已经达到了 100,会抛出连接池已满的异常.
如果你要高并发,建议你增大连接池大小,指定MaxPoolCount =1000或是更大(好像是这样拼的具体查msdn) 连接池对应连接字符串,如果字符串不同,少个多个空格,连接池都不同 连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。
当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。
如果连接生存期已过期,或者连接池管理程序检测到与服务器的连接已断开,连接池管理程序将从池中移除该连接。只有在尝试与服务器进行通信后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。连接池管理程序会定期扫描连接池,查找已释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。