【问题标题】:C# Windows Application - Many threads using the same connection?C# Windows 应用程序 - 许多线程使用相同的连接?
【发布时间】:2008-12-23 18:17:38
【问题描述】:

我有一个多线程的 c# WINDOWS 应用程序。据我了解,在 Web 环境中,连接是自动汇集的。据我了解,在 Windows 应用程序中,情况并非如此。因此,对于 Windows 应用,应该使用相同的连接,而不是在每次调用后关闭,而是在应用关闭时关闭。

不过我很好奇——我说的对吗?如果是,两个线程是否可以使用相同的连接同时从数据库中获取数据集,或者该功能是否已排队?

谢谢

【问题讨论】:

    标签: c# database multithreading ado.net


    【解决方案1】:

    连接池是 ADO.NET 的一项功能。因此,连接已经被池化。不仅在网络环境中。

    http://www.ondotnet.com/pub/a/dotnet/2004/02/09/connpool.html

    【讨论】:

      【解决方案2】:

      据我了解,在网络中 环境,连接被池化 自动地。这也是我的 了解在 Windows 应用程序中, 事实并非如此。

      不,这是错误的,正如 m3rLinEz 指出的那样。连接始终是池化的。

      因此,对于 Windows 应用程序,同样 应该使用连接而不是 每次通话后关闭,而是 应用关闭时关闭。

      可以在单体 WinForms 应用程序的应用程序期间保持连接打开。但最好在需要时使用打开/关闭连接的标准模式。连接池意味着您不会注意到性能差异。并且您的数据访问代码将与 ASP.NET 等服务器应用程序兼容。

      如果是,两个线程可以使用同一个吗 连接以从 DB同时还是那个 功能排队了吗?

      没有。 ADO.NET 类(连接、命令等)不是线程安全的,不应该在没有同步的线程之间共享。但如上所述,您应该更喜欢数据访问的标准模式。

      【讨论】:

        【解决方案3】:

        好的 - 所以我的这个假设是通过观察得出的:当我尝试以典型的池方式设置 win 应用程序时,在建立与远程服务器的真实连接时,我总是会遇到 3-5 秒的延迟。即使我先打开,然后关闭,下一个查询总是会有这个延迟。

        服务器连接时,显然不会为池中的每个连接建立连接。此外,池化机制是否足够聪明,可以抓取它知道已经打开的连接,或者它是否可以简单地抓取任何随机连接?

        池中默认的最大连接数是多少?

        【讨论】:

        • 默认依赖于提供程序(SqlConnection 为 100),池化可以通过连接字符串中的参数进行配置。 3-5 秒的延迟听起来不正常,我建议您尝试创建一个小型重现并发布显示此行为的代码。
        猜你喜欢
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 2013-05-23
        • 2018-12-17
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        相关资源
        最近更新 更多