2011-01-13 76 views
4

如果運行unden CLR 4.0,爲CLR 2.0編譯的.NET程序運行速度會更快嗎?CLR 2.0 vs 4.0性能?

的app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0,Profile=Client" /> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 
+0

可能的話,如果它遇到4.0運行時比2.0運行時好的地方之一。但我不知道是否有很多這樣的景點。 – CodesInChaos 2011-01-13 21:16:59

+0

我不懷疑,在某些情況下,速度更快。這可能不是您的應用程序的瓶頸,如果這是您來自的方向。 – 2011-01-13 21:17:14

回答

7

通常,無 - 這將是相同的。

默認情況下,CLR 4運行庫將加載CLR 2運行庫以執行您的CLR 2代碼庫。在CLR 4下強制執行需要在app.Config中設置useLegacyV2RuntimeActivationPolicy

如果添加該標誌,則它將在CLR的v4中運行。通常,性能可能非常相似,但由於JIT和核心運行時的更改,它可能與新運行時略有差異。不能保證CLR 4會更快 - 有時可能會更慢,但總的來說,我預計在兩個運行時間下,性能都會非常接近。

如果您遇到性能問題,請分析您的應用程序。更改運行時不會解決性能問題。但是,在兩種模式下運行時分析應用程序將是瞭解它是否對您有所幫助的唯一方法。

0

一般來說,並不明顯。運行時都是向後兼容的,舊版本中找到的AFAIK庫只有在語言規格發生變化(例如添加協變/逆變支持)或被識別爲真實內存/ CPU時才被修改。

0

通常:

有一對夫婦的角落案件進行性能改進,即如果應用程序充斥小塊工作的線程池,則工作竊取線程池優化將是一個巨大的勝利。這也可能會顯着改變工作執行的順序,所以一些偶然依賴訂購的應用程序可能會崩潰。

在背景中有類似的角落案例GC(中大對象壓縮)和Interop(對象鎖定更改)。

摘要

如果.NET 3.5(CLR 2.X)應用程序的性能比預期的那麼嘗試在.NET 4.5(CLR 4.x)時,應用程序變得更糟。