2009-06-17 132 views
2

我有一個控制器操作,可以彙集來自多個來源的數據:Web服務,數據庫,文件查找等,並將結果傳遞給視圖。所以爲了渲染頁面所有的任務必須完成。目前它們是按順序執行的,但是由於它們是獨立的,我正在考慮將它們並行運行,因爲這可以提高性能。ASP.NET MVC和長時間運行的操作

那麼最好的方法是什麼?對於每個任務啓動一個新線程並在所有任務完成時阻止主線程?我應該使用線程池中的線程還是手動生成新線程?使用線程池中的線程會限制我的Web服務器提供新請求的能力,因此這可能不是一個好主意。手動產生新線程可能會很昂貴,所以在一天結束時,通過並行執行這些任務或者讓它們按順序運行,性能會有一個淨增益?

+1

是否有一個選項可以在頁面加載後告訴用戶他們的請求正在被處理時,讓AJAX調用(或調用?)檢索數據?如果用戶看到某個消息發生了某些事情,並且他們的請求很快就會得到回覆,那麼用戶會自動等待更長的時間... – 2009-06-17 14:13:30

+0

我無法使用AJAX,因爲界面完全受到這些任務返回的結果的限制,例如按鈕應該可見或不可見,頁面可見或不可見的區域。 – 2009-06-17 14:16:21

+0

也許異步控制器可以幫助你?聽起來像任務主要是I/O綁定。 – bzlm 2011-02-22 21:56:29

回答

1

如果它在產生自己的線程或使用線程池線程之間,我會說使用線程池中的線程。如果發現線程已用盡,則可以隨時調整服務器設置以允許在池中使用更多線程。

0

回答最終問題的唯一方法是實際測試它,因爲我們不知道單獨的聚合任務有多複雜。如果你想給出一個響應式用戶界面的幻覺,你總是可以顯示加載頁面,並通過AJAX啓動聚合。即使是非線程的,這可能會安撫你的用戶。

相關問題