我有一个aspx页面,它通过Jquery Ajax请求异步加载10个图表。正在向实现IReadOnlySessionState的Generic Handler发出请求,因为需要访问会话变量,但它是一个读取,这样我就不会受到asp.net实现的读写会话锁的影响。
通过调试器,我能够看到调用是异步发生的,但似乎存在一个限制,因为有些调用仅在前几个调用完成后才进入代码。我不确定这是在IIS上的设计还是web.config中的属性。
一个用户/会话一次可以拥有的线程数限制吗?
答案 0 :(得分:0)
IIS和asp.net处理线程的方式取决于您使用的IIS版本。 workerthreads的数量是有限制的,并且必须保留的线程数量有上限。这意味着一次只能执行一定数量的线程。
请参阅:http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx
如果您的ASP.NET应用程序使用的是Web服务(WFC或ASMX)或 System.Net可以通过HTTP与后端进行通信 增加connectionManagement / maxconnection。对于ASP.NET 应用程序,autoConfig功能限制为12 * #CPU。
同样来自同一篇文章:http://support.microsoft.com/kb/821268
如果您长时间运行来自AJAX的HTTP请求,最好的办法是进行异步http请求处理程序。然后请求可以在IO线程上等待,因为asp.net拥有比workerthreads更多的IO线程。
请参阅:http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45