我写了一个测试页面,它在一个名为页面加载的方法中做了很多繁忙的工作。我现在这个过程大约需要12秒钟。
如果我在第一个长时间运行的页面加载时尝试加载另一个页面,除了写出一个hello世界之外,第二个页面什么都不做,直到第一个长时间运行的页面完成才会加载。
为什么会这样?我认为IIS能够处理多个并发连接,一个长时间运行的页面会阻止应用程序中的每个其他页面加载,这似乎很疯狂。我必须遗漏一些东西或者不理解IIS是如何工作的。
我认为会在不同的线程上产生多个独立的请求。如果请求完全来自不同的会话,是否只有这种情况?来自单个会话的所有请求都绑定到单个线程吗?
BD
答案 0 :(得分:6)
您需要关闭sessionState ...如果会话已启用,则任何后续请求正在等待上一个线程完成以继续该特定会话。
因此关闭会话,它不需要等待任何先前的会话。
在web.config put
中<system.web>
<sessionState mode="Off" />
</system.web>
现在你应该同时拥有这些请求流程。
答案 1 :(得分:5)
我也遇到了这个问题,对我而言,事实证明它是ASP.NET的会话功能。基本上,如果您启用了会话,则每个请求都将按其到达的顺序返回每个用户。
尝试使用2种不同的浏览器,对我来说它不再被阻止。这是一个类似的问题:
IIS 5.1 on XP Classic ASP appears to be in single threaded mode
答案 2 :(得分:0)
这是一个线程问题。虽然IIS可以同时处理多个连接,但默认情况下,ASP.NET是以单线程模式配置的。
Microsoft的这一选择是为了防止虚拟开发人员犯下常见的并发错误。用于Mono的ASP.NET不会显示此行为,如果您在没有事先锁定的情况下访问共享资源,则可能是...... f ...您知道;)黄页死亡。
我不记得确切的程序,但在您网站的属性中,您可以选择应用程序池以及线程数。我用眼睛看到IIS6默认将它设置为1。
如果找不到,请告诉我明天我将在实验室中查看我的开发服务器。
希望得到帮助。