【问题标题】:Managing Sql Connections in C# Multithreading在 C# 多线程中管理 Sql 连接
【发布时间】:2016-06-20 17:57:45
【问题描述】:

我编写了一个 c# 多线程函数,它从 sqlserver 读取数据并为每一行数据启动一个单独的线程。在每个线程中,我都有需要使用 db 的代码。 这是我在每个线程中所做的:

  • 创建新的 sql 连接
  • 连接到它并打开它
  • 工作
  • 关闭连接(虽然没有必要)

我应该注意我使用了 Using() 命令,并且我已经阅读了该语句管理 sql 连接并在执行命令后自动关闭它。

这个函数应该定期调用(比如每 1 分钟) 这就是我遇到的问题:

在第一次调用后,活动 sql 连接的数量增加到行数(每行创建的线程)。在第二次调用中,这个数字再次增加。例如,在 5 次调用 100 行之后,我们有 500 个活动 sql 连接! 但我读过连接池管理连接并再次使用创建的连接。 我应该怎么做才能解决这个问题? 我是否遗漏了任何声明或有什么事情我忘记了?

【问题讨论】:

  • 请为您的问题提供一些背景信息。你想达到什么目的?这是一个负载测试应用程序吗?
  • 它是一个监控服务,我将应该监控的设备插入到 db 并启动一个新线程来监控每个设备
  • 看看这是否与您的案例相关:stackoverflow.com/questions/268982/…

标签: c# sql-server multithreading


【解决方案1】:

使用 just 是一种尝试 - 最后,仅此而已,它调用 Dispose ,仅此而已。

in a "using" block is a SqlConnection closed on return or exception?

【讨论】:

  • ok 如果它调用 dispose 为什么在 dispose 命令后连接保持打开并且不关闭?
  • 它可能因为连接池而保持打开状态 - msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx 。您可以在连接字符串中限制池中的最大连接数: Max Pool Size=xxx 。没有代码 sn-p,我无法提供更多帮助。
  • 是的,由于连接池的原因,如何限制连接剩余时间?还是禁用池化是一种不好的方法?
  • 在连接字符串中:Max Pool Size=xxx
  • 如果我完全禁用它会怎样?
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2011-04-29
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
相关资源
最近更新 更多