2011-08-29 88 views
1

我有一個應用程序需要一堆數據,並在非常耗時的一系列週期中對其進行處理。完成的結果應該可以通過HTTP API訪問。我決定創建一個執行處理的核心庫,以及一個在新線程上啓動進程的ASP.NET應用程序。核心庫產生4個線程,它們處理來自隊列的對象。ASP.NET比控制檯應用程序慢

但是,這顯然比在簡單的控制檯應用程序中運行處理要慢很多。在我的控制檯應用程序中,每個循環處理大約需要13-20秒,平均時間約爲17秒,在我的ASP.NET應用程序中,處理需要13-350(是三百五十)秒,平均時間約爲45秒。每個循環的時間在我的ASP.NET應用程序中變化很大。

使用我錯過的ASP.NET框架有沒有明顯的性能下降?我已經禁用了回收,並且在處理時幾乎沒有請求被提供,如果有的話。這是否與線程或垃圾收集有關?我懷疑後者,因爲大多數循環運行速度不夠快,而有些速度非常慢,這會破壞我的總處理時間。

我是否應該離開ASP.NET並嘗試在我的控制檯應用程序中實現HTTP偵聽器,或者將其重新編譯爲Windows服務?有任何想法嗎?

+0

控制檯應用程序運行32位,您的Web應用程序在64位。如果您使用了大量資源,則Web應用程序需要更多內存,然後使用您的控制檯應用程序。嘗試在32位運行你的網絡應用程序。順便說一句,沒有一些代碼,我們只能猜測問題... – Peter

+0

@peer:如果我運行一個控制檯應用程序,它運行在64位,如果我啓動一個Web應用程序(在Visual Studio內部Web服務器)它運行在32位。無論如何,你有一點可能會影響性能,但編譯特定目標的控制檯應用程序比將IIS更改爲32位要容易得多。 – Guffa

回答

3

ASP.NET應用程序顯然總是比控制檯應用程序執行速度慢。

原因:

  1. HTTP協議的開銷。由ASP.NET本身控制ASP.NET框架DLL的

  2. 有限公司線程

  3. 大內存的使用情況。

你可以建立使用WCF服務,將由您的應用程序調用。

+2

1應該不是問題,因爲計算完全不使用HTTP,所以在計算完成後,我只使用HTTP訪問結果。 2可能是真實的,與上面的32位和64位註釋相同,但是如果我的計算機沒有用完內存,它不應該開始交換到影響性能的程度,每分幾百美元? 3如果我使用Thread t = new Thread()而不是使用線程池,那麼我認爲這不是問題? – DukeOf1Cat

相關問題