Connection pooling: The .NET connector supports connection pooling. This is ON by default, but can be turned off via the connectionstring. Connection pooling works by keeping the native connection to the server, when a MySqlConnection is disposed. When a new MySqlConnection object is opened, it will be drawn from the pool instead of opening a new native connection, giving much improved performance. To work as intended, it is best to let the pooling system control all connections. This means, you should not create a globally accessible instance of MySqlConnection and manually opening and closing it. This might interfere with the way the pooling works and might lead to unpredictable results or even exceptions. One simple and easy to remember approach is to not manually create a MySqlConnection object at all, but instead use the method overloads that take a connectionstring as argument. Using this approach, the connector will automatically create, open and close/dispose connections, using the connection pooling system for best performance. Typed Datasets and the Membership- and RoleProvider use this approach. Most classes, that take a MySqlConnection as an argument, have overloads that take a connectionstring. This includes MySqlDataAdapter. Instead of manually creating MySqlCommand objects, you can use the MySqlHelper class' static methods that take a connectionstring as argument, they fully support connection pooling.