単一の接続を共有することは決して良いことではなく、悪い習慣です。主な理由は実際にはあなたの問題です。設計を少し変更して (大したことではありません)、ADO.NET接続プールに依存することをお勧めします。特にマルチスレッドの状況で、あらゆる種類のボトルネックに遭遇したくない場合に備えて、これは必須です。
これは、すべての接続が一時的であり、データベースにアクセスする必要がある場合にのみ接続を作成することを意味します。
詳細については、こちら を参照してください。ここでは、使用方法のサンプルも見つけることができます。それについて知っておくべき主なことは、それが Disposable パターンを使用していることです。
//Notice the **using ** block
using(SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
//do something with the connection.
//as soon as the using block ends, the managed connection is disposed and released in the pool
}