2011-01-13 2 views
4

unden CLR 4.0を実行している場合、CLR 2.0用にコンパイルされた.NETプログラムはより高速に動作しますか?CLR 2.0対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ランタイムより優れているスポットの1つに当たった可能性があります。しかし、私はそのような多くのスポットがあるかどうかはわかりません。 – CodesInChaos

+0

私はいくつかの状況では、それがより速いことを疑うことはありません。それがあなたの出番である場合は、おそらくあなたのアプリケーションのボトルネックではありません。 –

+7

見つける方法は1つだけです。それを試してみてください! –

答えて

7

典型的には、いいえ - それは同じであろう。

デフォルトでは、CLR 4ランタイムはCLR 2ランタイムを読み込んでCLR 2コードベースを実行します。 CLR 4で強制的に実行するには、app.ConfigにuseLegacyV2RuntimeActivationPolicyを設定する必要があります。

このフラグを追加すると、CLRのv4で実行されます。一般に、パフォーマンスは非常によく似ている可能性がありますが、JITおよびコアランタイムの変更により、新しいランタイムによって若干異なる場合があります。 CLR 4の高速化は保証されていません。通常は両方のランタイムでパフォーマンスが非常に近いと予想されますが、時間がかかることもあります。

パフォーマンスに問題がある場合は、アプリケーションのプロファイルを作成してください。ランタイムを変更しても、パフォーマンスの問題は解決されません。しかし、両方で実行している間にアプリケーションをプロファイリングすることは、それがあなたのために違いを生むかどうかを知る唯一の方法になります。

+0

あなたの答えについての質問がありますか、私を混乱させますか? _ "CLR 2ランタイムは、CLR 2コードベースを実行するためにCLR 2ランタイムをロードします。" _は、アプリケーションがCLR 2.0で構築されており、そのapp.configに '< CLR 4.0のapp.configにもかかわらず、CLR 2.0でアプリケーションが実行されますか?サポートされているランタイムバージョン= "v4.0" /> '、 –

+0

@Reed - [my post](http://stackoverflow.com/questions/6921976/#6963368)とMSDNのドキュメントでは、 'useLegacyV2RuntimeActivationPolicy'は混合モードアセンブリにのみ適用されます。普通の人にとって重要な設定です。純粋に管理されたコードを持つネットアプリは、古いアプリにより新しいCLRを使用させるため、 'supportedRuntimes'タグです。 – nekno

0

一般的に言えば、顕著ではありません。ランタイムはすべて下位互換性があり、古いバージョンで見つかったAFAIKライブラリは、言語仕様が変更された場合(たとえば、共分散/反動サポートを追加する場合)、または実際のメモリ/ CPU豚として識別された場合にのみ変更されました。

0

通常:いいえです。アプリケーションは、仕事の小片とのThreadPoolをフラッディングした場合

がが、パフォーマンスが改善されたコーナーケースがいくつかあり、すなわちそれからワークスチールのThreadPool最適化は大きな勝利となります。これにより、作業が実行される順序が大きく変わる可能性があるため、誤って注文に依存しているアプリもクラッシュする可能性があります。

同様の種類のコーナーケースが背景にあります。GC(メディカルラージオブジェクト圧縮)とInterop(オブジェクトロックの変更)です。

概要

.NET 3.5(CLR 2.xの)アプリのパフォーマンスは、.NET 4.5(CLR 4.xの)上のアプリを試してみてくださいその後、予想以上に悪化している場合。

関連する問題