我有一个 aspx 页面,它通过 Jquery Ajax 请求异步加载 10 个图表。请求是向实现 IReadOnlySessionState 的通用处理程序发出的,因为需要访问会话变量,但它是读取的,这样我就不会受到 asp.net 实现的读写会话锁的影响。
通过调试器,我可以看到调用是异步发生的,但似乎存在限制,因为某些调用仅在前几个调用完成后才进入代码。我不确定这是 IIS 上的设计还是 web.config 中的属性。
一个用户/会话一次可以拥有的线程数是否有限制?
IIS 和 asp.net 处理线程的方式取决于您使用的 IIS 版本。工作线程的数量有限制,并且必须保留可用的线程数量有上限。这意味着一次只能执行一定数量的线程。
请参阅: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 的 IO 线程比工作线程多得多。
参见:http ://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45