2009-07-01 28 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