EF優化之啟動預熱

2022-01-11 07:09:06 字數 2711 閱讀 2149

為什麼entity framework的初始化速度慢如蝸牛呢?

private

void

//對程式中定義的所有dbcontext逐一進行這個操作

}

在程式更新時只需發乙個請求讓程式啟動起來,比如訪問首頁,就可以直接發布。而第1位使用者,等待時間由原來7秒減少到0.5-0.6秒。

使用了ef的code first會在第一次ef查詢的時候會對__migrationhistory訪問,是為了檢查資料庫和model是否匹配,以保證ef能正常執行。

通過監測會先執行下面的sql:

select

[groupby1

].[a1]as

[c1]from ( select

count(1) as[a1

]from

[dbo

].[__migrationhistory]as

[extent1])

as[groupby1]go

select

top (1)[

extent1

].[id]as

[id],

[extent1

].[modelhash]as

[modelhash

]from

[dbo

].[edmmetadata]as

[extent1

]orderby[

extent1

].[id

]desc

go

這段sql語句其實中只是在開發的時候有用,發布到生產環境,可以把這個給禁用了以提高效能。

protected

void

mmisdbcontext這是我專案的ef上下方類,你要根據你的專案替換成自己的ef上下方類。

這是在iis8出來後才有的,iis8內建的功能,一些是iis10的配置圖

而對於iis7.5也提供了乙個擴充套件以支援這個功能。

在頁面接近底部的地方,找到適合自己架構的安裝鏈結

安裝這個iis模組後,在iis介面中並沒有模組圖示和配置介面,還需要安裝:

安裝成功之後會多了乙個配置如下圖:

如果僅配置程式池startmode為alwaysrunning還不放心的話,

設定應用程式池如下圖:

設定**如下圖

配置好後,測試了下,效果十分不錯。 **程式池後首次開啟各站點,延遲都很低。 其實這個模組的思路和定時從外部觸發乙個訪問是一樣的,只是,更好的地方在於,它本身在程式池**重啟的時候就完成了這件事,而不會讓外部訪問有機會遇到首次訪問的情況。

1、開啟cmd視窗

2、定位到dll所在的目錄,如:cd d:\website1\bin,切換到程式的bin目錄。

3、執行ngen命令

for 32

bit run:

%windir%\microsoft.net\framework\v4.0.30319

\ngen install entityframework.sqlserver.dll

for

64bit run:

%windir%\microsoft.net\framework64\v4.0.30319\ngen install entityframework.sqlserver.dll

注意:這裡根據你自己機器(是32還是64)和.net版本,選擇相應的命令,只需要安裝entityframework.sqlserver.dll,因為安依賴entityframework.dll,會自動安裝生成entityframework.dll的本地映象。

4.檢視是否在本機映像快取中,也列出了依賴子的相關類庫

%windir%\microsoft.net\framework64\v4.0.30319\ngen display entityframework
文件:

如果你覺得這還沒有解決」過了一段時間不訪問頁面然後再次開啟頁面變慢「的問題,而且不能忍受第一次訪問還是有點慢,可以設定應用程式池的」閒時超時「和**」固定時間間隔「長一些或者建乙個計畫任務定時去訪問使用了ef的頁面,這樣給ef熱身,讓ef不變冷,這樣可以防止長時間不請求**,應用程式程序停止再次訪問變慢的問題。設定應用程式池的時間如下圖:

閒時超時預設是20分鐘,如果在超過20分鐘都沒有請求這個應用程式池工作程序就要關閉。這裡你可以設定根據自己需要設定長一些。

用vs建乙個mvc專案,model、dal、controller、view都在web專案裡面。為了減少model和dal導致重新編譯dll帶來的效能影響。我把model和dal都單獨的分層,編譯成單獨的dll了。

這一點,我比較不理解,路過的高手請指點下

原文:

Orchard站點效能優化 預熱

orchard cms 包含乙個warmup module模組,當我們的站點在共享主機上的時候,它可以顯著的幫助我們快速響應使用者訪問請求.當你開啟這個模組以後,你設定的url的裡面的內容會快取起來,然後週期性的 熱身 1.開啟warmup module 模組 進入dashboard modules...

EF初次啟動慢

ef第一次查詢很慢,大約在2s左右,第二次及之後就變快了。efcore第一次查詢大約也有1s左右。而用ado.net第一次查詢也就只有100ms。測試結果 ef和ado.net 測試 如下 using system using system.collections.generic using sys...

android效能優化之啟動優化

解決方案 null null true drawable bg splash必要且耗時 mutidex 必要不耗時 首頁繪製 非必要耗時 資料上報,外掛程式初始化 非必要不耗時 直接去掉,需要時再載入。其他第三方元件的初始化 檢視日誌 將手機連線到android studio上,開啟logcat,不...