我什么时候应该使用ClearALLPools vs ClearPool?

时间:2015-07-08 16:43:14

标签: c# ado.net

我真的不明白它们之间的区别,我什么时候应该使用ClearALLPools代替ClearPool(或反之)?

是否有任何具体方案可以使用其中一种?

1 个答案:

答案 0 :(得分:5)

连接池非常有用,您应该使用它 - 它将连接对象的实际连接与数据库分开。您可以根据需要创建任意数量的连接对象,但最小化实际连接的数量。

但是,有一个成本 - 如果您不负责任地管理您的连接对象,那么将打开比(严格)要求更多的实际连接。在极端情况下,这会导致连接被拒绝,因为池已经达到极限。

正确的解决方法是既不调用ClearPool也不调用ClearAllPools。您应该找到泄漏连接对象并修复它们的位置。通常,每个连接对象都应 通过using语句进行清理,或者,如果要保持打开状态,它应该是一个成员。一次性对象,它将连接作为其Dispose函数的一部分关闭。

关于问题,如所要求的那样 - 连接池基于所使用的连接字符串。如果只对所有连接使用单个连接字符串,则方法是等效的。如果您使用多个连接字符串,那么差异就会变得明显,以一种显而易见的方式显示 - ClearPool仅影响使用相同连接字符串的连接。