我在我的上下文中有300個DbSets,應用程序加載後的第一個查詢(一個FirstOrDefault()在索引字段上)需要大約40秒。爲什麼我的EF Code First預生成視圖沒有效果?
爲了改善這一點,我試圖在EF使用預生成視圖4.3.1代碼第一次在這裏使用T4模板:
我編譯它,但我看不出有任何的性能差異。我希望/假設它會幫助我經歷的痛苦的慢啓動,但沒有運氣。
它應該有幫助嗎?如果不是,預生成視圖究竟用於什麼?而且,有什麼我可以做改善啓動時間嗎?至少可以說,將我的背景分開是痛苦的。
我在我的上下文中有300個DbSets,應用程序加載後的第一個查詢(一個FirstOrDefault()在索引字段上)需要大約40秒。爲什麼我的EF Code First預生成視圖沒有效果?
爲了改善這一點,我試圖在EF使用預生成視圖4.3.1代碼第一次在這裏使用T4模板:
我編譯它,但我看不出有任何的性能差異。我希望/假設它會幫助我經歷的痛苦的慢啓動,但沒有運氣。
它應該有幫助嗎?如果不是,預生成視圖究竟用於什麼?而且,有什麼我可以做改善啓動時間嗎?至少可以說,將我的背景分開是痛苦的。
事實證明,它實際上似乎是在第一個引用的實體是的程序集中搜索預生成視圖,而不是在DbContext所在的程序集中。在這裏看到更多的討論:http://blog.3d-logic.com/2012/06/13/entity-framework-codefirst-view-generation-templates-on-visual-studio-code-gallery/#comment-76。
爲了解決這個問題,我創建了一個新實體並將其放入上下文的程序集中,並將其列爲第一個DbSet。現在它可以完成,並且運行良好(除非這是荒謬的)。
此行爲也與數據庫和模型一起存在。我預先生成的視圖在同一個程序集中與上下文一起編譯。它們是在控制檯或Windows服務應用程序中拾取的,但不在IIS下。我能夠看到它,因爲我使用T4來生成它們,並添加了日誌。 – 2013-03-01 07:55:45
有同樣的問題,但我不明白的解決方案。我有一個asseblby與我的POCO實體和另一個程序集與我的edmx。我需要在我的程序集中擁有edmx的實體?我如何將它列爲第一個DBContext?謝謝。 – 2013-06-11 11:14:26
像NHibernate和EF這樣的某些ORM的啓動速度很慢。與其試圖「修復」這種緩慢,我喜歡通過確保IIS在應用程序池啓動時觸發此代碼來消除此問題。爲了解決此問題,您必須將IIS配置爲自動啓動應用程序池。此解決方案僅適用於.NET 4和IIS7.5及更新版本。
希望實現與IProcessHostPreloadClient
一個類加載一個ObjectContext
和配置應用程序添加一個serviceAutoStartProviders節點到你的web.config和設置STARTMODE =「AlwaysRunning」爲您的應用程序的應用程序池來使用它。詳情請參閱Scott Gu's blog。
這是一個很好的解決方案,但是,由於我無法控制的原因,我停留在IIS6/32位Window Server 2003上,因此我無法使用IProcessHostPreloadClient,並且網站始終在午間從記憶中回收... – 2012-07-22 00:44:23
定期退貨不是問題。該方法只是確保應用程序池再次啓動,而正常行爲是直到呼叫到達才啓動。然而,IIS6將是一個不成問題的解決方案。在Windows服務中自我託管一個選項? – Mithon 2012-07-22 01:52:37
這是一個問題 - 用戶正在使用該站點,觸發了回收站,他的下一個請求會轉到新的應用程序池,並且這會持續下去,從而導致該站點掛起。 – 2012-08-13 16:36:45
在ASP.NET中預編譯視圖有些奇怪。我有同樣的問題。 – jrummell 2012-07-18 14:43:05