C3p0 性能

增强性能,是连接池、Statement池以及c3p0类库的主要目的。对大多数应用程序来说,连接池会使得性能显著提高,特别是当你给每个客户端访问每次都重新获取连接的话。如果你让单个的共享的连接来为多个客户端服务以避免过多的连接获取工作的话,那么你在多线程的环境下可能会遇到性能或者事物管理问题;连接池将会能够让你有机会选择很少或没有开销的单客户端单连接模型(One Connection-per client model)。

如果你正在编写企业级Java Bean,你可能会想要只获取一次连接然后并不返回它,直到它被销毁或者过时。但是这样做太耗费资源了,因为这些Bean不必要的占用了连接网络和数据库资源。连接池允许Bean只在使用连接时才占有连接。

但是,c3p0也有性能上的开销。为了实现当父资源返回池得时候自动清理未被关闭的ResultSet和Statement,所有客户端可见的Connection,ResultSet,Statement都封装了那些底层的数据源或者“传统的”JDBC驱动。因此,所有JDBC调用都会有一些额外的开销。

c3p0在减小“封装”所带来的性能开销方面下了一些工夫。在我的环境中,由包装所带来的性能问题来自成百上千的数据库获取操作。

所以,你应该从c3p0中得到的是性能的提升和高效的资源利用,除非你快速地轮载(succession)了很多很多JDBC调用。

很显然,与结果集相关操作(比如要在其上遍历一个有上千条记录的表)带来的开销是可以忽略不计的。

REF:
http://cwiki.ossez.com/pages/viewpage.action?pageId=4719843