2016-01-27 82 views
0

我試圖在Azure託管的EF6 Web應用程序中登錄時以低速度引發問題。隨着我所做的所有研究,我仍然不太明白爲什麼我的應用程序的行爲方式如此。實體框架作爲Web應用程序速度問題

當我第一次部署應用程序,並嘗試登錄時,速度很慢,這我明白爲什麼,這是可以接受的。隨後的登錄和呼叫相對較快。我不明白的是,爲什麼如果我不與應用程序進行大約5分鐘的交互(即使我的Azure Web應用程序始終設置爲啓用並且是標準定價層Web應用程序),下一次登錄將會回落花費20+秒。

我不太明白什麼「第一次運行」意味着當有人說實體變慢時。這是否意味着「ANYONE訪問網絡應用程序首次」,或者是否意味着這樣的意思:「當第一次使用一個特定的客戶端實例化dbContext時,這是他們特定的第一次運行,並且它們的實例的應用程序/ dbcontext什麼現在熱身和準備「

後者似乎沒有道理,因爲我可以登錄一臺機器,並移動到另一臺機器,它也會相對較快。

+0

「首次運行」將引用實體框架程序集加載到應用程序域後第一次運行EF查詢。 –

回答

0

「第一次」意味着應用程序啓動後第一次使用dbContext(查詢)。但是,當應用程序閒置一段時間時,應用程序池將重新啓動,並且下次您進入該站點時,它將重新啓動。這就是爲什麼在一段時間沒有活動的情況下,EF需要時間。

看一看this post約在蔚藍

+0

謝謝,但他們添加的Always On功能應該可以防止根據Microsoft回收應用程序池,無論如何,誰知道他們是否說實話。 –

+0

我只是解釋爲什麼空閒後需要時間才能開始。我不知道您是否需要使用Always On,您應該深入瞭解並決定最適合您的應用。 – tede24

+0

這裏有另一篇關於自動啓動http://stackoverflow.com/questions/14238569/force-application-start-on-azure-web-role,你應該研究這個概念(也許這職位或其他),以加速註冊登錄 – tede24

0

「首次運行」應用程序池重啓將參照首次實體框架組件中的應用程序域加載後的EF查詢運行。

EF是一個相當大的程序集,它們需要一些時間來初始加載。在第一個查詢中,他們還會做很多驗證模型的工作。預緩存模型的視圖(MSDN)可以減少很多時間。對於有很多映射表和存儲過程的數據庫來說,這可能需要很長時間。我有一些項目可能需要3分鐘才能啓動。預測減少到約10秒。儘管如此,它還是增加了管理模式更改的複雜性。

之前的實體框架可以執行一個查詢或更改保存到 數據源,必須生成一組映射視圖訪問 數據庫。這些映射視圖是一組實體SQL語句,其中 以抽象方式表示數據庫,並且是爲每個應用程序域緩存的元數據的一部分。如果您在同一應用程序域中創建 多個相同上下文的實例,則它們將重新使用緩存元數據中的映射視圖,而不是重新生成它們的 。因爲映射視圖生成是執行第一個查詢的總體成本的重要部分,所以實體框架使您能夠預先生成映射視圖並將它們包括在編譯的項目中 。