Opening a connection to the database is an expensive operation in the form of both time and memory. If you had to open and close a connection to the database each time it was required by your application, the performance of your application would deteriorate, particularly if there are many concurrent users.
Luckily, both the OLE DB and managed SQL providers in ADO.NET automatically provide connection pooling. Connection pooling creates persistent connections to the database that can be shared, as needed. If a connection attempt is made and all connections are currently in use, another connection is added to the pool.
A separate pool is created for each unique connection string. If two connection strings differ by even a single character, two separate pools are created.