c# - SqlConnection 支持多少并发语句
问题描述
SqlConnection
C#支持多少并发语句?
假设我正在开发运行 10 个线程的 Windows 服务。所有线程使用相同的SqlConnection
对象但不同的SqlCommand
对象,并在不同的表或相同的表但不同的数据上执行选择、插入、更新和删除等操作。它会起作用吗?单个SqlConnection
对象能否同时处理 10 个语句?
解决方案
C# SqlConnection 支持多少并发语句?
从技术上讲,您可以拥有多个“进行中”语句,但只有一个正在执行。
单个 SqlConnection 映射到 SQL Server 中的单个 Connection 和 Session。在 Sql Server 中,一个会话一次只能有一个活动的请求。如果启用 MultipeActiveResultsets,您可以在前一个查询完成之前启动一个新查询,但语句是交错的,永远不会并行运行。
MARS 支持在单个连接中交错执行多个请求。也就是说,它允许批处理运行,并且在其执行过程中,它允许执行其他请求。但是请注意,MARS 是根据交错定义的,而不是根据并行 执行定义的。
和
只能在明确定义的点切换执行。
所以你甚至不能保证当一个语句被阻塞时另一个语句会运行。所以如果你想并行运行语句,你需要使用多个SqlConnections。
另请注意,单个查询可能使用并行执行计划,并且有多个任务并行运行。
推荐阅读
- python - 移动平均线计算不正确
- kubernetes - Kubernetes 内的 systemd 服务无法获取环境
- asp.net-web-api - 如何在 .Net Core 2.2 中使用 IHttpClientFactory 下载文件?
- postgresql - 提高选择查询的性能
- reactjs - 未调度的操作
- reactjs - React-admin:如何将更多参数传递给 GET_LIST 类型的 dataProvider
- java - 即使 onDestroy 被解雇,我的服务也不会停止
- python - 如何在python中标记列表列表
- php - 如何修复mysql中的“外键约束失败”
- angular - 如何在 cdkDropList 中停止自动排列功能