Se você criar um por consulta / transação, será muito mais fácil gerenciar o "fechamento" das conexões.
Eu posso ver porque o senso comum determina que você deve abrir um e usá-lo por toda parte, mas você terá problemas com conexões descartadas e multithreading. Então, o seu próximo passo será abrir uma piscina, digamos de 50 conexões, e mantê-las todas abertas, distribuindo-as para diferentes processos. E então você descobrirá que isso é exatamente o que o framework .NET faz para você já .
Se você abrir uma conexão quando precisar dela e descartá-la quando terminar, a conexão não será realmente encerrada, apenas será retornada ao pool de conexão para ser usada novamente.