2014-06-26 57 views
0

這是我的困境。我在MVC應用程序中有一個頁面,它使用ajax調用通過局部視圖顯示搜索結果列表。該模型是代表動態數據集的List<List<string>>,即用戶選擇他們想要返回的列以及它們返回的順序。所有視圖都在做的是一個嵌套循環,用於構建結果表。設置會話變量導致MVC中的FileContentResult呈現緩慢

其中一個潛在的返回字段是條形碼的圖像,通過另一種方法呈現,返回FileContentResult。通常情況下,這種方法效果很好,非常流暢,性能卓越,甚至在數百行長的數據集中,我也沒有注意到所有條形碼都被渲染和下載。

當我使用HttpContext.Current.Session設置會話變量時,出現問題,甚至像Session["thingy"] = "thingy";那樣簡單。當發生這種情況時,條形碼圖像會造成嚴重的性能下降。在搜索按鈕被擊中後,需要一秒才能完全加載的結果集現在遭受圖像「彈出」,最多持續10秒。幾次圖像加載失敗,給出了「服務器現在太忙」的錯誤。

有沒有人在溢水地區有什麼可以導致這種行爲的見解?我發現了一個kludgy解決方法,但它涉及到不必要的ajax調用和額外的數據庫訪問。

+0

鎖定對SqlSessionState的訪問? –

+0

不對不起,我應該更清楚。我正在使用HttpContext.Current.Session對象。我會更新。 –

+0

Alexei詢問您的會話狀態是存儲在Sql Server還是in-proc中? –

回答

0

所以問題在於,當會話中存儲任何內容時,IIS會同步處理請求。因此,我所有對條形碼動作的調用都在等待,直到最後一個動作完成,然後纔開始動作。

答案在this link張貼由阿列克謝。奇怪的是,這是最簡單的答案,提供了最簡單的解決方案。我爲我的圖像創建了一個新的控制器,並將條形碼渲染操作重構爲其中,然後用[SessionState(SessionStateBehavior.Disabled)]修飾控制器,迫使IIS將對控制器中的操作的任何請求視爲異步。

0

我前段時間遇到同樣的問題。通過在我的web.config中將EnableSessionState設置爲ReadOnly來修復它。

我認爲它可能有一些負面影響,但沒有到目前爲止。甚至在SO發佈了一個問題來尋找意見。

請看這裏:EnableSessionState = ReadOnly - possible side effects?