0

我在 IIS 服务器上发布了一个 ASP.NET MVC 应用程序。我在这里使用网络园艺,我的意思是,应用程序池有多个工作进程来处理传入的请求。此应用程序也被许多用户客户使用。

这个应用程序调用一个使用一些本地临时表的 SP(#example)。举个例子:

BEGIN

if OBJECT_ID(N'tempdb..#MyTempTable') IS NOT NULL
BEGIN
  DROP TABLE #MyTempTable
END

CREATE TABLE #MyTempTable
(
   someField int,
   someFieldMore nvarchar(50)
)

... Use of temp table here
... And then drop table again at the end..

DROP TABLE #MyTempTable

END

我担心并发性,例如,如果用户客户端调用存储过程而另一个先前的调用同时运行会发生什么?这里可能是并发问题吗?

4

1 回答 1

0

在 IIS(包括大多数 Web 服务器)中,使用线程来处理请求。每个请求都将在应用程序池中创建的新线程中执行。除非共享资源,线程之间不会相互影响。

本地临时对象由 Session 分隔。如果您有两个查询同时运行,那么它们显然是两个完全独立的会话,您无需担心。登录无关紧要。如果您使用的是连接池,那也没关系。本地临时对象(最常见的是表,但也包括存储过程)不会被其他会话看到。

即使是多个线程(也是请求)想要使用一个连接并执行存储过程,连接池也不能重用同一个连接。这意味着没有危险。在此线程中进行了解释。

同样,一个线程使用连接并执行存储过程,它不会有效果。所有调用都使用相同的存储过程。它们将按顺序排队,直到执行前一个调用。

于 2020-09-21T09:53:42.553 回答