2015-06-18 19 views
6

我知道這已被問了太多次,但我無法從問題中找出解決方案。實體框架代碼前30+秒啓動時間

我對Entity Framework相當新穎,我使用Entity Framework 6和Code First方法爲我的網站開發了一個小型CMS面板。我的問題是,網站在第一次運行時非常慢(這是我正在測試www.oakwoodpawnshop.ca的網站),加載需要30秒。 第一次加載後,加載其他頁面需要大約一秒的時間。我從PageSpeed的洞察中獲得了89/100,我所有的images/js/css文件都被最小化了,並且完成了一些其他的前端優化,所以我知道我的問題與EF有關。我有3年前建立的另一個網站只使用LINQ,沒有數據庫優化或HTML /圖像優化,並在大約3秒內打開。

我已經使用Entity Framework Power Tools預先生成了視圖,並且我的代碼中沒有任何包含方法。我在.toList()函數之前過濾了我的查詢。我的代碼或數據庫優化可能有問題,但是我無法通過我的研究想出一個解決方案,因爲這個區域對我來說是新的。

我用我的母語找到了一篇文章,詢問有相同問題的人在命令提示符下運行一些代碼,看看問題是否出現在網絡設置中。

這些對於命令提示行:

1 - 的netsh INT IP復位A.TXT

2 - 的netsh Winsock的復位

3 - 的netsh WinHTTP的復位代理

4 - netsh advfirewall reset

5 - ipconfig/flushdns

6 - 重新啓動計算機並再次檢查。

當我做了這些,並檢查回到網站,整個網站在3秒內打開。一段時間後,它開始再次啓動30+秒。顯然,我無法在每個人的計算機上運行這些命令,但是我迷失了方向,我不知道爲什麼它要花很長時間才能啓動。

這裏是我使用的方法的例子:下一個「工人」類

public List<Categories> GetCategories() 
    { 
     List<Categories> c = db.Categories.Where(x => x.TopCategoryId == 0).OrderBy(x => x.CatOrder).ToList(); 

     return c; 
    } 

我創建自定義的方法來獲取我的DATAS(這樣我就可以更方便地使用它們)收集所有我方法在一個類中。這可能是問題嗎?

我很樂意提供您需要的更多信息,而且我現在處理這個問題大概一個月,但沒有運氣,所以我無望地尋找答案,或者我將不得不重新創建整個應用程序沒有EF,因爲客戶無法等待擁有+30秒開放時間的網站。

非常感謝您的寶貴意見!

+0

問題很可能與遷移有關。你是否仍然在積極地處理你的應用程序,你必須有遷移活動?每次應用程序首次啓動時,都必須檢查__migrationHistory;如果您的應用程序不再進行主動更改,禁用遷移或將基準遷移從空數據庫遷移到單個當前遷移應該會有所幫助。 – Claies

+0

Hi @Claies,非常感謝你如此快速:)我只是在內容方面的應用程序工作,所以很長一段時間沒有數據庫的變化。我刪除了我的遷移歷史記錄表和遷移文件夾,並再次發佈了該網站,請問是否可以檢查它是否已解決?它現在看起來對我更快 –

回答

1

您可以初始化實體框架數據庫。與你的上下文類替換的DbContext:

using(var context = new DbContext()) 
{ 
    context.Database.Initialize(false); 
} 

如果您正在使用asp.net mvc的,你可以從你的Application_Start()方法做到這一點。但是,您需要使用Application Initialization模塊(可用於IIS 7.5,作爲extension)。修改應用程序池條目,以便應用程序池始終運行。刪除空閒超時。在特定時間配置IIS應用程序池回收(例如,上午04:00)。您可能需要在Web.config中指定初始化頁面(「/」是默認):

<applicationInitialization> 
    <add initializationPage="/initialze" /> 
</applicationInitialization> 

這些措施不會完全熱身實體框架,但會大大減少冷啓動時間。

+0

HI Ranquild,非常感謝您的回答。我初始化了我的ef數據庫,但對於其餘的建議,我正在使用共享託管服務器。我不知道我有權訪問您提到的那些設置。我仍然可以在共享主機中進行這些更改嗎?謝謝:) –

+0

初始化數據庫應該足夠了。對於其他更改,它用於確定的應用程序重新啓動。 – ranquild

+0

好,我再次發佈了我的網站,但它似乎開放緩慢,然後在tho之前快一點。請問您是否可以檢查您的瀏覽器是如何打開的?謝謝! –