我们开始为ASP.Net Web应用程序编写越来越多的代码使用新线程来完成长时间运行的任务。我找不到任何可靠的文档,为IIS中使用线程的任何限制提供任何有用的指导(6)。任何有关此目的的建议都将受到赞赏 - 特别是以下内容:
感谢您的任何建议
答案 0 :(得分:3)
我假设你已经调查了Asynchronous ASP.NET page processing?
答案 1 :(得分:2)
答案 2 :(得分:1)
我找不到那些可靠的文档 给任何有用的指导 使用限制的限制 IIS(6)中的线程。
主要是因为这是一个坏主意。长时间运行的进程应该转换为Windows服务,这些服务要么连续运行,要么偶尔检查数据库或其他任何可以通过asp.net应用程序唤醒的工作或服务。
答案 3 :(得分:0)
我自己经常做同样的事情。我发现有一个最大值基于“每个CPU的n个线程数”,这些可以在web.config和machine.config文件中进行调整和微调。 This post对此有合理的解释。
建议的最大值将是默认设置,至少根据我之前在此主题上从Microsoft读过的文档。
您需要了解的最大陷阱是如何将进度或结果报告给用户。我通常使用来自客户端的轮询机制来回调一个检查会话状态以获取进度的页面。会话状态当然是从主线程更新的。如果您希望在现实生活中看到这种方法,请访问House of Travel网站并搜索航班。
答案 4 :(得分:0)
这是一个评论,但我意识到它比我想象的更有意义。 Eric Lippert之前已经听过这一系列问题,并指出它是无法回答的。
所以,简而言之,甚至不去那里。 想出一个使用的设计 少数线程并调整它。
答案 5 :(得分:0)
确保在您受益时只使用线程。如果长时间运行的代码是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