了解ASP.Net实例和线程

时间:2009-11-12 21:47:58

标签: asp.net multithreading

查看一个非常简单的Web项目,托管在IIS中,带有一个简单的aspx页面,执行一些代码(从db获取一些数据并填充一些控件),以下哪项是正确的:

每个页面请求共享代码隐藏类的相同实例 或者每个页面请求都在自己的代码隐藏类实例中运行。

是否针对每个aspx页面运行一个线程/实例。或者一个线程/实例覆盖多个页面?

我试图理解,在一个简单的Web项目中,它接收100个页面请求,它们会一个接一个地连续运行,还是每个请求有多个实例/线程?

3 个答案:

答案 0 :(得分:5)

  • 每个请求都会获得代码隐藏类的新实例。
  • 代码隐藏类的一个实例提供一个请求。
  • 不同时间点的两个请求可以在线程池的同一个线程上运行。
  • 两个以并行方式运行的请求每个都有一个线程(我认为;如果有一些我不知道有关线程的极端情况,则不是100%确定。)

因此,Web服务器可以并行处理多个请求,但当然可以同时为多少个请求提供服务。

答案 1 :(得分:2)

每个请求都有一个代码后面的代码实例。

嗯,实际上它是aspx页面类的一个实例,它继承自类后面的代码。 (这就是为什么你在后面的代码中使用protected关键字作为事件处理程序的原因,以便继承类可以访问它们。)

还有一个Server.TransferServer.Execute的情况,然后请求转移到另一个页面实例。

在IIS处理请求中运行了多个线程,并且通常在一个线程中处理一个请求,但在某些情况下可以将请求从一个线程移动到另一个线程。

如果100个请求到达服务器,它将开始在单独的线程中处理其中一些请求,并将其余的请求放入队列中。值得注意的是,服务器每次只处理一个页面,因此除非你使用无会话页面(使它们匿名),否则它不会为并行线程中的同一用户处理两个页面,这使得整个线程部分成为一个页面很容易。

答案 2 :(得分:1)

也许看一下异步ASP.NET?

http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

通常会为新请求分配新线程。

“正常或同步的页面在请求期间保留在线程上,防止该线程被用于处理其他请求。”