1

我创建了一个老式的 .ASMX Web 服务,想知道内置的 ADO.NET 连接池如何与它一起工作。

Web 服务没有使用单例模式,因此每次请求都会重新实例化它。我的问题是,每次服务请求后连接会从池中删除,还是跨请求保留在池中?我的服务被非常频繁地调用,但如果可以避免的话,我不想每次都设置和拆除连接。

我已经读到该池是为 AppDomain 维护的,但我不确定每个请求是否会生成一个新的 AppDomain。

我也很好奇在这种情况下设置 Min Pool Size(设置为 0 以外的小数字)是否有益。

有人知道吗?

4

1 回答 1

3

不,每个请求都不会生成新的应用程序域。该网站/应用程序的所有请求都在同一个应用程序域中,因此共享连接池。一旦 asmx 请求完成了连接,它会将其返回到池中,并且行中的下一个请求会抓取它(假设池中没有其他可用的连接)。

澄清一点。您可以有两个不同的 Web 应用程序,它们指向相同的代码,并且位于不同的应用程序域中。这两个应用程序不共享任何东西(考虑两次启动同一个应用程序)。

我也很好奇在这种情况下设置 Min Pool Size(设置为 0 以外的小数字)是否有益。

因此,根据应用程序,它可能是有益的。创建连接需要时间,所以准备好一些可以让你放弃。如果您有请求说使用一个连接,那么让一个人等待可能很好(这完全取决于您希望应用程序响应的速度)。当你需要为一个请求说 3 或 4 个不同的(你明白了)打开时,这真的可以发挥作用。那么为什么需要多个连接呢?一个用于访问数据和一个单独的线程用于记录到数据库(记录到数据库与文件是完全不同的对话)呢?现在你需要两个。有多种情况可以发挥作用。根据您的数据库服务器保持开放连接可能会非常便宜,因此将其设置为一个较小的数字可能会为您带来巨大的收益。

这是针对 Max Pool Size
不,它没有好处,因为对该服务的所有请求都使用相同的池(假设连接使用相同的连接字符串,并且没有访问不同的服务器。那些有单独的连接池)。没有可用的连接是破坏服务性能的一种非常快速且可靠的方法。

于 2010-12-17T22:22:16.697 回答