代码之家  ›  专栏  ›  技术社区  ›  James

IIS和线程

  •  4
  • James  · 技术社区  · 16 年前

    我们开始为一个ASP.NET Web应用程序编写越来越多的代码,它使用一个新线程来完成长时间运行的任务。我找不到任何可靠的文档来指导在IIS(6)中使用线程的任何限制。对此,任何建议都将不胜感激,具体如下:

    • 最大线程数是多少(如果有的话)
    • 有推荐的最大号码吗
    • 在ASP.NET IIS Web应用程序中使用线程是否存在任何缺陷?

    谢谢你的建议

    6 回复  |  直到 16 年前
        1
  •  3
  •   RichardOD    16 年前

    我想你已经调查过了 Asynchronous ASP.NET page processing ?

        2
  •  2
  •   Shiraz Bhaiji    16 年前

    提高.NET应用程序性能和可扩展性

    http://msdn.microsoft.com/en-us/library/ms998530.aspx

    编写高性能Web应用程序的10个提示

    http://msdn.microsoft.com/en-us/magazine/cc163854.aspx

        3
  •  1
  •   Spencer Ruport    16 年前

    我找不到任何可靠的文件 给任何有用的指导 使用限制的限制 IIS(6)中的线程。

    主要是因为这是个坏主意。长时间运行的进程应转换为Windows服务,这些服务可以连续运行,偶尔检查数据库或其他工作或ASP.NET应用程序可以唤醒的服务。

        4
  •  0
  •   David McEwing    16 年前

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

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

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

        5
  •  0
  •   Brian    16 年前

    我本来打算对此发表评论,但我意识到它比我想象的更具相关性。 Eric Lippert 以前听过这组问题,并说这是无法回答的。

    总之,不要去那里。 提出一个使用 少量线程并调整。

        6
  •  0
  •   Duncan    16 年前

    确保您只在要受益的时候使用线程。如果长时间运行的代码是CPU密集型的,那么您实际上不会从异步调用中受益(事实上,性能会随着开销的增加而降低)。

    使用线程进行I/O操作或调用Web服务。

    每个应用程序都不同。简单地将threadpool设置为max不是答案,或者它已经设置为这个级别了!

    设置线程池的值越高,CPU就越饱和,因此如果您有CPU密集型代码,那么这只会使问题更加复杂。

    当然,您可以将这些CPU密集型调用卸载到另一台机器上。

    http://msdn.microsoft.com/en-gb/magazine/cc163327.aspx http://msdn.microsoft.com/en-us/magazine/cc163725.aspx