2009-07-01 50 views
4

我们开始为ASP.Net Web应用程序编写越来越多的代码,它使用新线程来完成长时间运行的任务。我没有找到可靠的文档,它提供了有关IIS(6)中使用线程限制的任何限制的有用指南。任何意见,为此将不胜感激 - 具体有以下几种:IIS和线程

  • 什么(如果有的话)是线程的最大数量
  • 有没有推荐的最大数量
  • 是否有使用内螺纹的任何缺陷一个ASP.Net IIS Web应用程序?

感谢您的任何意见

+2

小点:你的ASP.NET应用程序没有 “在IIS中” 运行。它运行在ASP.NET工作进程中(在你的情况下是w3wp.exe)。 – 2009-07-01 21:19:27

回答

0

我自己经常做同样的事情。我发现有一个基于“每个CPU有n个线程”的最大值,这些可以在web.config和machine.config文件中调整和微调。 This post对此有合理的解释。

建议的最大值将是默认设置,至少根据我以前从Microsoft有关此主题读取的文档。

您会发现需要跨越的最大缺陷是如何向用户报告进度或结果。我通常使用客户端的轮询机制来回调查看会话状态进度的页面。会话状态当然是从主线程更新的。如果你想看到这种方法在现实生活中的工作,请参阅House of Travel网站并搜索航班。

1

我找不到固体说明文件 给出任何有用的指导的使用IIS内 线程的限制任何 限制(6)。

主要是因为这是一个坏主意。长时间运行的进程应该转换成windows服务,这些服务可以连续运行,偶尔会检查数据库或其他工作要做的事情,或者可以由asp.net应用程序唤醒的服务。

0

正想使这个评论,但我意识到它比我想象的更有意义。 Eric Lippert之前已经听过这组问题,并指出它是无法回答的。

因此,总之,甚至不要去那里。 想出一个设计,该设计使用少量线程并对其进行调整。

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