Когда я тестирую время выполнения, как это, время на моей машине 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);
}
}
Вы предполагаете, что выполнить дополнительный оператор (тот, который закрывает соединение) будет означать, что программа займет больше времени, поскольку выполнение оператора close() добавляет дополнительное использование ЦП.
Если вы его не выполнили, вы сохраните это время CPU, однако база данных должна иметь дело с более открытыми соединениями одновременно, что может ухудшить его производительность. Следовательно, инструкция getConnection() будет занимать больше времени, поскольку число открытых подключений увеличивается.
Вероятно, именно по этой причине ваша вторая версия выполняется медленнее первой.
Вы не закрываете соединение сразу во втором. Открытие и закрытие одного соединения 100 раз не займет почти столько же времени, как открытие 100 соединений одновременно.