我使用的.Net 2.0 + SQL Server 2005企业+ VSTS 2008 + C#+ ADO.Net开发ASP.Net Web应用程序。 在ASP.Net Web应用程序的数据库中心/驱动。 我想知道有没有,当我们在ADO.Net开启/关闭线程池设置连接字符串设置什么是性能差异的任何性能参考数据? 性能我的意思是这两者可支持的并发连接,并从ADO.Net客户端执行特定的SQL命令的执行时间?
感谢avdance,乔治·
我使用的.Net 2.0 + SQL Server 2005企业+ VSTS 2008 + C#+ ADO.Net开发ASP.Net Web应用程序。 在ASP.Net Web应用程序的数据库中心/驱动。 我想知道有没有,当我们在ADO.Net开启/关闭线程池设置连接字符串设置什么是性能差异的任何性能参考数据? 性能我的意思是这两者可支持的并发连接,并从ADO.Net客户端执行特定的SQL命令的执行时间?
感谢avdance,乔治·
我没有任何性能统计在手,但也许使用连接池时,提醒一句:你可能最终得到太多的小水池,而不是一个大的一个。
ADO.NET将创建一个新的连接池
每个连接串; 它是关于这个非常挑剔,太-如果你有两个连接字符串是由哪怕只是一个单一的空间或不同的东西,那些被认为是两个独立的连接字符串,并会导致正在创建单独的连接池
每个Windows凭据如果使用的是“综合安全”(受信任的连接)设置
所以,如果你有一个连接字符串像
server=MyDBServer;database=MyDatabase;integrated security=SSPI;
每个区分用户一个连接池将被创建 - 这是相当反直觉的,但是这是它的方式(而不能影响/关闭)。
退房的MSDN文档的详细信息,ADO.NET连接池:
当连接第一次打开时,基于该关联起来的连接的连接字符串池的精确匹配算法创建一个连接池。 每个连接池与不同的连接字符串相关的。 当一个新的连接被打开,如果连接字符串是不完全匹配到现有的池,将创建一个新池。 连接每个进程池,每个应用程序域,每个连接字符串和集成的 安全性 时 使用,每Windows 标识。 连接字符串也必须完全匹配; 以不同的顺序提供用于在同一连接关键字将被分别合并。
另外,如果你有这两个连接字符串:
server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret
和
server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;
那些被认为是不同的连接字符串,因而两个单独的连接池将被创建。
当尝试测量连接池的作用,这是一个需要注意的!
渣
性能差异会因应用程序有很大的不同,所以你应该期望什么样的收益没有硬数据。
你的行动最好的办法把它用在你的应用程序做压力测试,它有/无配置池来衡量它,看看它是如何会。
WCAT是一种压力的工具,你可以用它来装载你的ASP.NET应用程序中。
您也可以尝试探查器(其中有很多)来监控您的应用程序,看看它是如何执行的压力。
一些探查器: 蚂蚁 , dotTrace
写一个小progeam访问数据库。 没有打开将其关闭,并循环100次的数据库连接。
你说“线程池”,但显然是在谈论连接池为您的标题显示。
没有用于创建新的数据库连接的性能开销。 这是一个资源密集型操作,这就是为什么我们有ADO.NET连接池。 有效地连接没有关闭,而是仅仅返回到他们留活性,并且可以通过相同的代码库(在AppDomain内)的其它部分中重复使用该池。
一个ADO.NET应用程序池是每个唯一的连接字符串创建的,因此是值得一提的是,当您使用集成安全性,你会失去连接池的好处,你将有效地有一个连接池每DB身份验证的用户。