小さな質問。foreach内のアイテムのリストをループする標準的な方法
どちらがループするのが良いか、どちらも同じですか。
アプローチ1:
foreach(var listitem in GetItems())
{
}
アプローチ2:
var listItems = GetItems();
foreach(var listitem in listItems)
{
}
private List<myclass> GetItems()
{
//get items from database
}
私は、私の場合は、実行時間に差を見つけることができませんでしたが、その後わずか数百のレコードがデータベースにありました。
私が知りたいのは、アプローチ1では、リスト内の各アイテムに対してGetItems()
を実行するのか、それとも1回だけ実行するのかということです。
どちらも同じです。 'listItems'を複数の場所で使いたいので、メソッドを複数回呼び出す必要がないようにするには、2番目の方法を使います。 –
これは同じです。もちろん、毎回実行されるわけではありません。それは1つの 'GetItems'呼び出しと' while'ブロックにコンパイルされます。 –
'GetItems()'は一度だけ実行されます。 2番目のアプローチはメソッド全体のライフタイムを持つ 'listItems'オブジェクトを作成して保持するため、最初のアプローチをお勧めします。 CLRがそれを呼び出すか、明示的にコード内で呼び出された場合にのみ、ガーベッジ・コレクションが収集されます。 – praty