当我像这样测试运行时间时,我机器上的时间是735
public class TestDBCP {
static
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
long l = System.currentTimeMillis();
Connection conn = null;
try {
for(int i =0; i < 100; i++)
{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo","root","Sph815@cs");
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(System.currentTimeMillis() - l);
}
}
但是当我使用以下测试时,它的运行时间变得更长,我不明白为什么更多的工作时间更少?
public class TestDBCP {
static
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
long l = System.currentTimeMillis();
try {
for(int i =0; i < 100; i++)
{
DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo","root","Sph815@cs");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(System.currentTimeMillis() - l);
}
}
答案 0 :(得分:0)
您没有立即关闭第二个连接。打开和关闭一个连接100次并不会像一次打开100个连接那样长。
答案 1 :(得分:0)
您假设执行额外语句(关闭连接的语句)将意味着程序将花费更多时间,因为close()语句执行会增加额外的CPU使用率。
如果您不执行它,则会节省此CPU时间,但数据库必须处理更多open connections simultaneously,这会降低其性能。因此,随着打开的连接数量的增加,getConnection()语句将花费更长的时间来执行。
这可能是你的第二个版本比第一个版本执行速度慢的原因。