什么时候应该使用 ClearALLPools 与 ClearPool?

When should I use ClearALLPools vs ClearPool?

我不太明白它们之间的区别,什么时候应该使用 ClearALLPools 而不是 ClearPool(反之亦然)?

是否有使用其中一种的特定场景?

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

但是,这是有代价的 - 如果您没有负责任地管理您的连接对象,那么将打开比(严格)所需更多的实际连接。在极端情况下,这可能会导致连接被拒绝,因为池已达到其限制。

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


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