2012-01-04 12 views
2

C#の次のような状況が考えられました。c#インライン関数の引数とテンポラリ変数

時には関数名がかなり長くて冗長になることがあります。

[ImportModelStateFromTempData] 
[BreadCrumb("New Event")] 
public ActionResult New() 
{ 
    var @event = _dbContext.EventRepository.CreateNewEvent(); 

    return View("New", 
     EventViewModel.FromEventDomainModel(@event)); 
} 

このコードはそうのように、一時的な変数@eventを使用せずに書き換えることができます:

[ImportModelStateFromTempData] 
[BreadCrumb("New Event")] 
public ActionResult New() 
{ 
    return View("New", 
     EventViewModel.FromEventDomainModel(_dbContext.EventRepository.CreateNewEvent())); 
} 

私は仕事でウェブサイトのためのMicrosoftのMVC 3のフレームワークを使用しています、ここでは例として機能です最初の例ははっきりとはっきりしていますが、純粋な好奇心の観点/パフォーマンスの観点からは、他のものより速いですか?特にキャッシュされた値@eventが一度だけ使用されていることを考慮してください。

C++では、@event(これがC++の場合)のローカル変数宣言はNew()のスタックフレームに格納され、生成されたアセンブリは直接的に内部よりも遅くなることがわかりました。引数(一時的に格納するのではなく)。

この状況についてC#コンパイラはよりスマートになっていますか?同じパフォーマンス上の考慮事項がなくても、私は一時的なものを自由に使用できますか?

私は、事前最適化が悪いことを理解しています。このようなことについては心配するべきではありませんが、私はこれについて興味があります。私はタイトルが私の質問を記述するのに最良の方法だったので、私はこれについてのより多くの情報を調べることになるだろうと確信していません。だからあなたはスタックオーバーフローをどう思いますか?

答えて

3

一時変数が良いです。

デバッグ中は、機能の結果を確認できます。

遅延がある場合は、ナノ秒またはピコ秒です。

メンテナンスはキングです。