【问题标题】:SqlConnection.ClearAllPools, what is cleared?SqlConnection.ClearAllPools,清除什么?
【发布时间】:2010-09-28 06:00:32
【问题描述】:

我有一个应用程序,它使用SqlConnection.ClearAllPools 在删除数据库之前关闭所有连接。

存在连接仍然存在的情况。此连接已在另一个应用程序域中创建。

所以我想知道SqlConnection.ClearAllPools 关闭了哪些连接?

  • 只有调用进程(或 AppDomain)打开的连接?
  • 这台机器打开的所有连接?
  • ...?

【问题讨论】:

    标签: .net sql-server ado.net connection-pooling


    【解决方案1】:

    它只关闭调用进程打开的所有连接。它清空绑定到进程的所有连接池。 Quote:

    连接池和连接字符串齐头并进。每个连接池都与一个不同的连接字符串相关联,而且它也是特定于应用程序的。反过来,这意味着——为每个不同的进程、应用程序域和连接字符串维护一个单独的连接池。

    【讨论】:

    • 谢谢。文档根本不清楚。我知道每个配置和每个应用程序都有一个池。但是 ClearAllPools 是复数,它清除了几个池。但哪些?它不能依赖于配置,因为它是一个没有任何参数的静态方法。但它是否依赖于进程/应用域?
    • @Stefan,是的,文档并不清楚这种方法。事实上,如果每个应用程序域使用不同的连接字符串,它可能有多个池。一旦您将连接字符串传递给应用程序域内的SqlConnection,此连接要么从与此连接池关联的池中提取,要么将创建一个新池(如果它不存在)。这就是为什么还有SqlConnection.ClearPool 方法允许您仅清除与给定连接关联的池的原因。所以基本上池是每个连接字符串/每个应用程序域。
    • 当然,这是我可以在文档中找到的部分。但我无法从中得出ClearAllPools 的“范围”。
    • @DarinDimitrov 我什么时候需要运行 SqlConnection.ClearAllPools ?在什么情况下?
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2020-08-28
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多