看一个非常简单的Web项目,托管在IIS中,带有一个简单的aspx页面,执行一些代码(从db获取一些数据并填充一些控件),以下哪项是真的:了解ASP.Net实例和线程
每个页面请求共享codebehind类的同一个实例。
或每个页面请求都在它自己的代码隐藏类的实例中运行。
是否有一个线程/实例针对每个aspx页面运行。或者一个线程/实例是否覆盖多个页面?
我试图理解,在一个简单的Web项目中,接收100个页面请求,他们将连续运行一个接一个,或多个实例/线程为每个请求?
看一个非常简单的Web项目,托管在IIS中,带有一个简单的aspx页面,执行一些代码(从db获取一些数据并填充一些控件),以下哪项是真的:了解ASP.Net实例和线程
每个页面请求共享codebehind类的同一个实例。
或每个页面请求都在它自己的代码隐藏类的实例中运行。
是否有一个线程/实例针对每个aspx页面运行。或者一个线程/实例是否覆盖多个页面?
我试图理解,在一个简单的Web项目中,接收100个页面请求,他们将连续运行一个接一个,或多个实例/线程为每个请求?
因此,一个web服务器可以并行处理多个请求,但是当然可以同时处理多少个请求。
也许看看异步ASP.NET吗?
http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
通常一个新的线程被分配给一个新的请求。 “
”正常或同步页面在请求期间持有线程,阻止线程用于处理其他请求。“
对于每个请求,类的后面都有一个实例。
嗯,实际上它是一个aspx页面类的实例,它继承自class后面的代码。 (这就是为什么你正在使用的代码隐藏事件处理程序的protected
关键字,因此继承类可以访问它们。)
还有,你做一个Server.Transfer
或Server.Execute
的情况下,则该请求被转移到另一个页面实例。
有几个线程在IIS处理请求中运行,通常一个请求在一个线程中处理,但在某些情况下请求可以从一个线程移动到另一个线程。
如果有100个请求到达服务器,它将开始在单独的线程中处理其中的几个请求,并将其余的请求放入队列中。值得注意的是,服务器一次只能从每个用户处理一个页面,因此除非使用无会话页面(使其匿名),否则它不会为并行线程中的同一用户处理两个页面,这会使整个线程部分成为很容易。
我并不质疑你的问题的有效性......但我很想知道你为什么对此感兴趣。 – Larsenal 2009-11-12 21:51:18
我试图理解,如果我在代码隐藏中声明和设置对象,并且我的函数需要一些时间,是否需要开始考虑thread安全。 – Andy 2009-11-12 21:58:40