我有一个多线程的c#WINDOWS应用程序。我的理解是,在Web环境中,连接会自动汇集。我的理解是,在Windows应用程序中,情况并非如此。因此,对于Windows应用程序,应使用相同的连接,而不是在每次调用后关闭,而是在应用程序关闭时关闭。
我很好奇 - 我是对的吗?如果是,两个线程是否可以使用相同的连接同时从数据库获取数据集,或者该功能是否排队?
由于
答案 0 :(得分:5)
连接池是ADO.NET的一个功能。因此,连接已经合并。不仅仅是在网络环境中。
http://www.ondotnet.com/pub/a/dotnet/2004/02/09/connpool.html
答案 1 :(得分:2)
我的理解是在网络上 环境,连接汇集 自动。这也是我的 了解在Windows应用程序中, 事实并非如此。
不,这是错的,正如m3rLinEz指出的那样。连接总是汇集在一起。
因此,对于Windows应用程序,同样如此 应该使用连接而不是 每次通话后关闭,但相反 应用程序关闭时关闭。
你可以在单片WinForms应用程序中保持连接打开一段时间。但最好在需要时使用打开/关闭连接的标准模式。连接池意味着您不会注意到性能差异。并且您的数据访问代码将与ASP.NET等服务器应用程序兼容。
如果是,则两个线程可以使用相同的线程 从中获取数据集的连接 DB同时或是那个 排队的功能?
没有。 ADO.NET类(连接,命令等)不是线程安全的,不应在没有同步的线程之间共享。但如上所述,您应该更喜欢数据访问的标准模式。
答案 2 :(得分:0)
当服务器连接时,它显然不会为池中的每个连接建立连接。此外,池化机制是否足够智能以获取它知道已经打开的连接,或者它是否可以简单地抓取任何随机连接?
池中的默认最大连接数是什么?