我有一个服务器系统,我有一个开放的SQL连接池。请求以不同的线程进入服务器系统。是否有任何问题让每个请求线程从池中选择一个开放的SQL连接,使用它然后再将它 - 仍然打开 - 返回池中?压缩:是否允许使用来自不同线程的开放SQL连接,或者是否以某种方式打开SQL连接到已打开它的线程?
答案 0 :(得分:2)
不要跨范围,期间共享SqlConnection
个对象。这会产生巨大的麻烦,其中最重要的是将其丢弃并在发生错误时创建一个新的头痛(这使得连接无法使用)。这甚至不是特定于多个线程的;试图挂起连接即使只有一个线程使用它也很糟糕。
为您执行的每个查询创建一个新的SqlConnection
实例,并在完成后立即对其进行处理。 SqlConnection
不代表与服务器的物理连接,它只是来自连接池的连接的句柄(除非你足够愚蠢地关闭连接池 - 默认情况下它是打开的)。如果已经有可用的开放物理连接(并且池试图确保始终存在),则创建和打开一个是非常便宜的操作。
通常情况下,您不需要关心连接池,因为它“正常”,但如果您想了解更多(或需要了解更多信息,以便进行调整),请参阅“SQL Server Connection Pooling”。 MSDN。