2016-09-15 6 views
0

ラムダ式を使用するときのパフォーマンスを向上させる方法については、JetBrainsの赤い記事をちょっと参考にしてください:Unusual Ways of Boosting Up App Performance. Lambdas and LINQsC#インスタンス変数を使用するときのラムダ式のパフォーマンス

私は、インスタンス変数を使用すると、同じ種類のパフォーマンスが低下するのでしょうか?

public void DoSomething(IEnumerable<Something> myIEnumerable){ 
    DateTime yesterDay = DateTime.Now.AddDays(-1); 
    return myIEnumerable.Where(obj => obj.Expired>yesterDay); 
} 

しかし、どのような場合、私はインスタンス変数にアクセスします。それはラムダ式内の同じメソッドのスコープ内の変数にrefenrenceを使用してコードの次のようなものは、パフォーマンスが低下するだろうと言われた記事では 。それは効果の同じ負の一種?:JetBrainsの記事で

class SomeClass{ 

    private DateTime _yesterDay; 

    public void Foo(IEnumerable<SomeThing> myIEnumerable){ 
    _yesterDay = DateTime.Now.AddDays(-1); 
    IEnumerable<SomeThing> someThings = DoSomeThing(myIEnumerable); 
    //... 
    } 

    public IEnumerable<Something> DoSomething(IEnumerable<Something> myIEnumerable){ 
    return myIEnumerable.Where(obj => obj.Expired>_yesterDay); 
    } 

} 

おかげ

+12

どの馬が速いのか知りたいですか? [あなたの馬を競う!](https://ericlippert.com/2012/12/17/performance-rant/) –

+1

少なくともコンパイルする例を挙げてください。 –

+1

結果を無効に戻したいですか? –

答えて

0

を持っているでしょう、彼らは呼び出しごとにデリゲートをinstanciatingは費用がかかるという事実上の権利であり、文脈が一定でない場合にのみ必要です。

インスタンス(またはローカル変数)を取得するためにクロージャが必要で、ネイティブにキャッシュすることはできません。デリゲート引数、定数、および静的メンバーのみを使用する場合、クロージャは再構成されません。

コストは、大規模なバッチや基礎のために作られたコード(建築家の懸念事項)のように、大量に呼び出されるコード(ホットパス)にのみ影響する可能性があります。

ほとんどの場合、デザインを変更するためにこのオーバーヘッドを取ることは、維持に実際に費用がかかる時期尚早の最適化のようです。

関連する問題