我使用偉大的SpreadSheetGear工具即時生成報告。起初事情很棒,因爲報告很簡單,並且在1秒內完成。現在我處在更復雜的報告中,他們需要30秒鐘,最多1分鐘。這不是問題,我們只是拋出一個活動圖像,並讓用戶等待,我們很好。ASP.NET長任務掛起其他頁面?
我發現的問題是當兩個用戶來到網站。
- 用戶1來到現場
- 用戶1個運行報告稱,需要30秒。
- 用戶2來到網站
- 用戶2等待,直到用戶1報告完成,然後頁面加載。
運行用戶1的報告掛起站點,直到完成。發生了什麼事情,我該如何解決這個問題?
我使用偉大的SpreadSheetGear工具即時生成報告。起初事情很棒,因爲報告很簡單,並且在1秒內完成。現在我處在更復雜的報告中,他們需要30秒鐘,最多1分鐘。這不是問題,我們只是拋出一個活動圖像,並讓用戶等待,我們很好。ASP.NET長任務掛起其他頁面?
我發現的問題是當兩個用戶來到網站。
運行用戶1的報告掛起站點,直到完成。發生了什麼事情,我該如何解決這個問題?
你不會在代碼的外觀上分享任何細節,但聽起來你應該考慮製作asynchronous pages。簡而言之,訣竅是將繁重的工作從線程池中移出,線程池用於提供頁面請求。通過將繁重的工作轉移到其他線程,線程池線程可以快速返回到池中,以便爲其他傳入請求提供服務。
然後,更重要的是生成報告的機器可以承擔多少工作。
我以爲每個頁面都會脫離池中的一個線程。我們將有同時使用的用戶,但我懷疑這個數字一次會超過15個。服務器很難被利用,所以我試圖現場運行報告。 – 2010-09-28 18:29:33
我已經看過異步頁面,但該頁面上的代碼具有完全相同的問題。如果我在本地運行代碼並使用該確切代碼加載兩頁,如果第一頁正在運行,則第二頁在第一頁完成之前不會加載。 – 2010-09-28 19:04:59
報表數據多長時間變化一次?例如,如果您使用的是SQL Server,則可以使用存儲過程將報表數據創建到表並使存儲過程作爲SQL Server代理作業運行。根據需要更新數據,將作業設置爲頻繁運行。這應該會大大加快你的頁面。
聽起來像你可能有同一個線程上的兩個請求?
有些數據會每月更新一次,有些每天更新,有些則更新。我們使用SSG工具推出Excel報告,因爲這是我們用戶想要的。 – 2010-09-28 19:02:16
好像你的報告是由單線程處理的。很難說爲什麼,你應該發佈一些實現細節。 – Restuta 2010-09-28 18:09:11
頁面的代碼:http://pastebin.com/GSdT7cN6代碼後面的頁面http://pastebin.com/m2FAdf1Z它實際上返回了我們想要的響應中的xlsx文件。 – 2010-09-28 18:26:31