我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net来开发ASP.Net Web应用程序。 ASP.Net Web应用程序以数据库为中心/驱动。我想知道在ADO.Net连接字符串设置中打开/关闭线程池设置时是否有任何关于性能差异的性能参考数据?性能我指的是可以支持的并发连接和从ADO.Net客户端执行的特定SQL命令的执行时间?
感谢avdance, 乔治答案 0 :(得分:4)
从应用程序到应用程序,性能差异会有很大差异,因此没有关于您应该期望获得什么样的收益的硬数据。
您可以通过对应用进行压力测试来对其进行衡量的最佳操作,并配置/不使用池,并了解它的展示方式。
WCAT是一种可用于加载ASP.NET应用程序的压力工具。
您还可以尝试使用分析器(其中有很多分析器)来监控您的应用程序,以了解它在压力下的表现。
答案 1 :(得分:4)
我手边没有任何性能统计数据,但在使用连接池时可能会发出警告:最终可能会出现太多小池,而不是一个大池。
ADO.NET将为
创建一个新的连接池每个连接字符串;它也非常挑剔 - 如果你有两个连接字符串,即使只是一个空格或其他东西也不同,那些被认为是两个独立的连接字符串,并将导致单独的连接池创建
如果使用“集成安全性”(可信连接)设置,则为每个Windows凭据
所以如果你有一个类似
的连接字符串server=MyDBServer;database=MyDatabase;integrated security=SSPI;
每个可区分用户的一个连接池将被创建 - 这是相当反直觉的,但这就是它的方式(并且它不能被影响/关闭)。
有关详细信息,请查看ADO.NET连接池上的MSDN docs:
首次打开连接时,a 连接池是基于a创建的 精确匹配算法 将游泳池与游泳池相关联 连接中的连接字符串。 每个连接池都是关联的 具有不同的连接字符串。 打开新连接时,如果 连接字符串不是精确的 匹配现有池,新池 被建造。连接汇集在一起 每个应用程序域的进程 连接字符串和集成时 每个Windows使用安全性 身份。连接字符串也必须 完全匹配;提供关键字 以不同的顺序 连接将分开汇总。
此外,如果您有这两个连接字符串:
server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret
和
server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;
这些被认为是不同的连接字符串,因此将创建两个单独的连接池。
在尝试测量连接池的效果时,需要注意这一点!
马克
答案 2 :(得分:2)
编写一个小的progeam来访问数据库。打开数据库连接而不关闭它并循环100次。
答案 3 :(得分:2)
你说'线程池',但显然是在谈论你的标题显示的连接池。
创建新数据库连接存在性能开销。这是一个资源密集型操作,这就是我们拥有ADO.NET连接池的原因。有效连接不会关闭,而只是返回到它们保持活动状态的池中,并且可以由相同代码库的其他部分(在AppDomain内)重用。
创建了一个ADO.NET应用程序池PER唯一连接字符串,因此值得注意的是,当您使用集成安全性时,您将失去连接池的好处,因为每个DB身份验证用户将有效地拥有一个连接池。 / p>