は、次のコードを考えてみましょう、一般的なシーケンスの作成者に新しい()制約を使用するよりも速くRELEASEのための私のテストでは...そんなに
をのFunc <>を使用しているのはなぜ(デバッグではない!)のx86での構築
CreateSequence() with new() took 00:00:00.9158071
CreateSequence() with creator() took 00:00:00.1383482
CreateSequence() with new() took 00:00:00.9198317
CreateSequence() with creator() took 00:00:00.1372920
CreateSequence() with new() took 00:00:00.9340462
CreateSequence() with creator() took 00:00:00.1447375
CreateSequence() with new() took 00:00:00.9344077
CreateSequence() with creator() took 00:00:00.1365162
新しいオブジェクトを作成するために、デリゲートを定義するためのFunc <>を使用すると6倍以上速く「新しいTを呼び出すよりもあると思われます。Windows 7のx64 PC(インテルi7の3GHzのは)私は、次のような結果を得ました()" 直接。
これは少し予期せず...ジッタによって行われたインライン化のためだと思いますが、「新しいT()」を最適化できると思っていました。
誰でも説明がありますか?
多分私は間違いをしています。 (ガベージコレクタの影響を考慮しましたが、コードを並べ替えてGC.Collect()などを追加しても結果は大幅に変更されません)。
とにかく、ここでのコードは次のとおりです。
は
https://msmvps.com/blogs/jon_skeet/archive/2011/08/22/optimization-and-generics-part-1-the-new-constraint.aspx –
関連:http:// stackoverflowを参照してください。 com/questions/367577/why-does-the-c-sharp-compiler-emit-activator-createinstance-when-calling-new-in – nawfal