Fra*_*tin 1 c# sql-server multithreading sqlcommand sqlconnection
C#SqlConnection支持多少个并发语句?
假设我正在处理运行 10 个线程的 Windows 服务。所有线程使用相同的SqlConnection对象但不同的SqlCommand对象,并在不同的表或相同的表但不同的数据上执行选择、插入、更新和删除等操作。它会起作用吗?单个SqlConnection对象能否同时处理 10 条语句?
C# SqlConnection 支持多少个并发语句?
从技术上讲,您可以有多个“飞行中”语句,但只有一个实际执行。
单个 SqlConnection 映射到 SQL Server 中的单个连接和会话。在 Sql Server 中,一个会话一次只能有一个活动请求。如果您启用 MultipeActiveResultsets,您可以在前一个查询完成之前启动一个新查询,但语句是交错的,永远不会并行运行。
MARS 支持在单个连接中交错执行多个请求。也就是说,它允许一个批处理运行,并且在它的执行过程中,它允许其他请求执行。但是请注意,MARS 是根据交错定义的,而不是根据并行 执行定义的。
和
执行只能在明确定义的点上切换。
因此,您甚至无法保证每当一个语句被阻塞时就会运行另一个语句。所以如果要并行运行语句,就需要使用多个SqlConnections。
另请注意,单个查询可能使用并行执行计划,并且多个任务并行运行。