Como as conexões são bastante caras, como outros apontaram, recomendo usar uma técnica de "conexão lenta" em sua camada de banco de dados. Se você estruturou seu aplicativo de forma eficaz, sua lógica de aplicativo não deve se preocupar com quando as conexões são abertas e fechadas, pois isso seria encapsulado na camada de banco de dados. A camada de banco de dados, quando solicitada a realizar uma consulta, primeiro verificaria se possui uma conexão ativa e, se não, criaria uma. Dessa forma, você evitará abrir conexões que nunca são usadas e também terá uma boa separação de lógica entre seu aplicativo e o código do banco de dados.