簡體   English   中英

在Compact Framework 3.5中使用lambda表達式加載類在首次加載時很慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM