MySQL Connector/NET 支持连接池,以提高数据库密集型应用程序的性能和可扩展性。默认情况下启用此功能。您可以使用连接字符串选项 Pooling
、Connection Reset
、Connection Lifetime
、Cache Server Properties
、Max Pool Size
和 Min Pool Size
关闭或调整其性能特征。有关更多信息,请参见第 4.1 节,“创建 Connector/NET 连接字符串”。
连接池通过在客户端处置 MySqlConnection
时保持与服务器的本机连接活动来工作。随后,如果打开新的 MySqlConnection
对象,则它是从连接池中创建的,而不是创建新的本机连接。这提高了性能。
为了按设计工作,最好让连接池系统管理所有连接。不要创建全局可访问的 MySqlConnection
实例,然后手动打开和关闭它。这会干扰池的工作方式,并可能导致不可预测的结果甚至异常。
一种简化操作的方法是避免手动创建 MySqlConnection
对象。相反,请使用以连接字符串作为参数的重载方法。使用这种方法,Connector/NET 会自动创建、打开、关闭和销毁连接,使用连接池系统以获得最佳性能。
类型化数据集以及 MembershipProvider
和 RoleProvider
类使用这种方法。大多数具有以 MySqlConnection
作为参数的方法的类也具有以连接字符串作为参数的方法。这包括 MySqlDataAdapter
。
您无需手动创建 MySqlCommand
对象,而是可以使用 MySqlHelper
类的静态方法。这些方法以连接字符串作为参数,并且完全支持连接池。
Connector/NET 每三分钟运行一次后台作业,并从池中删除已处于空闲状态(未使用)超过三分钟的连接。池清理会释放客户端和服务器端的资源。这是因为在客户端,每个连接使用一个套接字,而在服务器端,每个连接使用一个套接字和一个线程。
多个端点。 从 Connector/NET 8.0.19 开始,连接字符串可以包含多个端点 (server
:
port
),并启用连接池。在运行时,Connector/NET 会随机从池中选择一个地址(或在提供时按优先级选择),并尝试连接到它。如果连接尝试失败,Connector/NET 会选择另一个地址,直到地址集用尽。每两分钟重试一次不成功的端点。成功的连接由连接池机制管理。