2017-10-23 9 views
0

私はプロジェクトの作業を開始しました。私はToList()が複数回呼び出されることに気付きました。本当に必要で冗長ではないと思います。ToList()を複数回呼び出すとパフォーマンスに影響はありますか?

最初のToList()は、呼び出しがデータベースに移動してデータを取得するデータレイヤーにあります。

public IEnumerable<Company> GetCompanies() 
    { 
     return DbContext.Companies.ToList(); 
    } 

そしてコントローラでIは、ToListメソッド(のような別のコールを見ることができる)

 public ActionResult Index() 
    { 
     var companies = _companyService.GetCompanies().ToList(); 
     return View(companies); 
    } 

IはコントローラでToListメソッド()を呼び出すことは冗長であると考えています。しかし、私はそれがパフォーマンスに何らかの影響を与えるかどうか、または結果自体が既にリストになっていて、2番目の呼び出しを無視する言語自体が自動的に認識されるかどうかは疑問です。

更新

ToListメソッド()を呼び出す影響がある場合は、他の質問が尋ねます。しかし、同じリストのオブジェクトに対してToList()を複数回呼び出しても影響があるのだろうかと思います。誰かがそれが "うまく無視される"べきであると述べた。

+2

デザインが貧弱です。メソッドは、シグネチャ内でできるだけ特定の型として返されます。メソッド引数は可能な限り汎用的でなければなりません。上記の場合、 'GetCompanies'の署名を' List ' – Igor

+2

に返すように変更する必要があります。あなたのデータがどこから来ているのかわからないので、私たちは知ることができません。それはデータベースですか?いくつかのサービス?ファイル?これは、結果がキャッシュされるかどうかにかかわらず、wheatherに大きな影響を与えます。しかし、最も重要なのは、 'DbContext.Company'とは何ですか? – HimBromBeere

+1

リストの 'ToList()'が意味を持たないので、冗長な呼び出しは無視されることを望みます。 – Rahul

答えて

2

はい、パフォーマンスに影響します。基礎となるIEnumerable<T>が既にList<T>であっても、ToListを呼び出すと、新しいリストが作成されます(list != list.ToList())。元のリストのサイズによっては、パフォーマンスに重大な影響を及ぼす可能性があります。