Время подключения к БД с использованием JDBC

1

Когда я тестирую время выполнения, как это, время на моей машине 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
    Вы проверили свой GC? Может быть, так как вы не кодируете соединения во втором примере, они привязываются к гораздо большему количеству объектов, тем самым увеличивая нагрузку на GC?
Показать ещё 3 комментария
Теги:
jdbc

2 ответа

0
Лучший ответ

Вы предполагаете, что выполнить дополнительный оператор (тот, который закрывает соединение) будет означать, что программа займет больше времени, поскольку выполнение оператора close() добавляет дополнительное использование ЦП.

Если вы его не выполнили, вы сохраните это время CPU, однако база данных должна иметь дело с более открытыми соединениями одновременно, что может ухудшить его производительность. Следовательно, инструкция getConnection() будет занимать больше времени, поскольку число открытых подключений увеличивается.

Вероятно, именно по этой причине ваша вторая версия выполняется медленнее первой.

0

Вы не закрываете соединение сразу во втором. Открытие и закрытие одного соединения 100 раз не займет почти столько же времени, как открытие 100 соединений одновременно.

  • 0
    открытие сразу?
  • 0
    они все открыты одновременно
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню