![](/img/trans.png)
[英]Slow updates with Entity Framework 4.3 and SQL Server Compact Edition 3.5
[英]Loading class with lambda expressions in Compact Framework 3.5 is slow on first load
在緊湊框架3.5應用程序中優化其中一個較大的表單時,我們注意到在加載包含lambda表達式的表單時會出現顯着的性能損失。 只有在發布模式下在設備上運行應用程序時才會注意到這一點。
當表單包含如下代碼時:
foreach (MyObject in objects.OrderBy(x => x.id))
該類的基本構造函數執行(取決於硬件)的時間比可能的等效時間長得多:
foreach (MyObject in objects.OrderBy(FunctionPointerInsteadOfLambda))
...
private string FunctionPointerInsteadOfLambda(MyObject obJ) {
return obj.Id;
}
我的理解是lambda編譯成一個匿名方法,這將為該類的方法槽表添加一個條目。 然而,當包括λ時,加載時間存在很大差異。 只要有它就會影響加載時間,即使它沒有被調用。 這只發生在第一次創建類的實例時。
在第二個示例中,延遲緩慢直到實際調用該方法。
我正在努力尋找關於緊湊框架的CLR的具體細節,這將有助於解決這個問題。
如果性能延遲是一致的(即在同一硬件上的同一點發生),那么我會將一次性能延遲歸因於JIT編譯。 雖然不一定方便,但一次性延遲是JIT編譯的典型特征。
由於您提到它僅在發布模式下發生,因此另一個考慮因素可能是編譯器正在執行一些優化,例如內聯,這會觸發延遲行為。 測試該理論的一種方法是創建一個禁用優化的發布版本,然后查看問題是否可重現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.