我已经创建了一个旧式的.ASMX Web服务,并且想知道内置的ADO.NET连接池如何与它一起工作。
Web服务没有使用单例模式,因此每次请求都会重新实例化。我的问题是,在每个服务请求之后是否会从池中删除连接,或者它们是否跨请求保存在池中?我的服务经常被调用,但如果可以避免的话,我不想每次都进行连接的设置和拆除。
我已经读过为AppDomain维护了池,但我不确定每个请求是否都会生成新的AppDomain。
我也很好奇在这种情况下设置最小池大小(为0以外的小数)是有益的。
有人知道吗?
答案 0 :(得分:3)
每个请求都不会生成新的应用域。对该网站/应用程序的所有请求都在同一个应用程序域中,因此共享连接池。一旦asmx请求通过连接完成,它就会将它返回到池中,并且下一个请求在线获取它(假设池中没有其他连接可用)。
澄清一点。您可以拥有两个不同的Web应用程序,它们指向相同的代码,并且位于不同的应用程序域中。这两个应用程序不共享任何内容(考虑两次启动相同的应用程序)。
我也很好奇 有利于设置最小池大小(到一个 这个中除了0)以外的小数字 案件。
因此取决于应用程序,它可能是有益的。创建连接需要时间,因此准备一些就可以让你放弃。如果你有请求说使用一个连接,那么让一个人等待可能没问题(这一切都取决于你希望应用程序响应的速度快)。当你需要为一个请求打开3或4个不同的(你得到的点)时,这真的可以发挥作用。那你为什么需要多个连接呢?如何访问数据和单独的线程来记录到数据库(记录到数据库与文件是完全不同的对话)?现在你需要两个。有多种情况可以发挥作用。根据您的数据库服务器保持打开连接可能相当便宜,因此将其设置为一个小数字可能是一个巨大的爆炸。 (对于记录,我看到连接到数据库的情况需要几秒钟,比如3-5,因此在这种情况下为用户保持打开连接是有益的。)
这是针对最大池大小
不,它没有益处,因为对该服务的所有请求都使用相同的池(假设连接使用相同的连接字符串,并且没有命中不同的服务器。那些具有单独的连接池)。没有可用的连接,是破坏服务性能的一种非常快速和可靠的方法。