我们开始为ASP.Net Web应用程序编写越来越多的代码,它使用新线程来完成长时间运行的任务。我没有找到可靠的文档,它提供了有关IIS(6)中使用线程限制的任何限制的有用指南。任何意见,为此将不胜感激 - 具体有以下几种:IIS和线程
- 什么(如果有的话)是线程的最大数量
- 有没有推荐的最大数量
- 是否有使用内螺纹的任何缺陷一个ASP.Net IIS Web应用程序?
感谢您的任何意见
我们开始为ASP.Net Web应用程序编写越来越多的代码,它使用新线程来完成长时间运行的任务。我没有找到可靠的文档,它提供了有关IIS(6)中使用线程限制的任何限制的有用指南。任何意见,为此将不胜感激 - 具体有以下几种:IIS和线程
感谢您的任何意见
我假设你已经看着Asynchronous ASP.NET page processing?
我自己经常做同样的事情。我发现有一个基于“每个CPU有n个线程”的最大值,这些可以在web.config和machine.config文件中调整和微调。 This post对此有合理的解释。
建议的最大值将是默认设置,至少根据我以前从Microsoft有关此主题读取的文档。
您会发现需要跨越的最大缺陷是如何向用户报告进度或结果。我通常使用客户端的轮询机制来回调查看会话状态进度的页面。会话状态当然是从主线程更新的。如果你想看到这种方法在现实生活中的工作,请参阅House of Travel网站并搜索航班。
我找不到固体说明文件 给出任何有用的指导的使用IIS内 线程的限制任何 限制(6)。
主要是因为这是一个坏主意。长时间运行的进程应该转换成windows服务,这些服务可以连续运行,偶尔会检查数据库或其他工作要做的事情,或者可以由asp.net应用程序唤醒的服务。
正想使这个评论,但我意识到它比我想象的更有意义。 Eric Lippert之前已经听过这组问题,并指出它是无法回答的。
因此,总之,甚至不要去那里。 想出一个设计,该设计使用少量线程并对其进行调整。
确保您只在要受益时使用线程。如果你的长时间运行的代码是CPU密集型的,那么你实际上并不会从异步调用中受益(事实上,性能会随着开销而降低)。
使用线程进行I/O操作或调用Web服务。
每个应用程序是不同的。简单地将ThreadPool设置为max不是答案,或者它已经被设置在这个级别!
设置ThreadPool越高,CPU就越饱和,所以如果你有CPU密集型代码,那么这就更加复杂了。
当然,您可以将这些CPU密集型调用卸载到另一台机器上。
http://msdn.microsoft.com/en-gb/magazine/cc163327.aspx http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
小点:你的ASP.NET应用程序没有 “在IIS中” 运行。它运行在ASP.NET工作进程中(在你的情况下是w3wp.exe)。 – 2009-07-01 21:19:27