1

プロパティは実際には関数ですが、フィールドと同じように機能することが期待されています。任意の の期待されるパフォーマンスについて何が言えますIEnumerableか?

プロパティから概念を借用して、IEnumerableが配列または を反復するのとほぼ同じように実行する必要があると言うのは公平List<T>ですか?

または、反復ごとに発生するほぼすべてのこと (データベース アクセス、Web サービスの呼び出し、時間のかかる計算など) に対しても大丈夫ですか?

4

4 に答える 4

1

がどれだけうまく機能するかについての規則はないと思いIEnumerable<T>ます-それがどのように振る舞うべきかについてだけです。つまり、コレクションをループする必要があります。

反復の開始時にデータベースにアクセスする必要がある場合(Entity FrameworkのようにIQueryable<T>)、それは問題ありません。アイテムごとにDBまたはファイルを呼び出す必要がある場合は、問題ありません。私にとって唯一重要なことは、それをループできることです。

于 2012-06-05T21:37:43.843 に答える
1

経験から言えば、任意の のパフォーマンスについて実際に推測することはできませんIEnumerable。たとえば、IQueryable変装して、列挙されるたびにデータベースにヒットする可能性があります。または、 の結果である可能性がありFile.EnumerateLinesます。

列挙型を一度だけ列挙することが重要な場合があります。

これはプロパティとは対照的です。プロパティがデータベースにヒットしたり、ファイルを読み取ったりする場合、これはコードの匂いだと思います。IEnumerableそれは普通のことです。

于 2012-06-05T21:36:29.580 に答える
0

IEnumerableにはプロパティがありませんが、ご存知のように、IEnumerableはIEnumeratorを返します。

オブジェクトがIEnumerable型のプロパティを公開している場合、それは一定時間で返されることが期待されますが、その列挙子の列挙にはおそらく期待がないはずです。

もちろん、状況は異なる場合があります。たとえば、WPFコントロールをその列挙可能なものにバインドしている場合、ユーザーはそれをすぐに返すことを望んでいます。

于 2012-06-05T21:38:26.530 に答える
0

IEnumerableもちろん、データベースにアクセスしたり、ファイルをクロールしたりするために使用できますが、そのようなものを公開する場合は、IEnumerableそれを明確に文書化する必要があります。

高価であることがすぐにわからない場合は、適切にカプセル化し、メモリ内の列挙のみを公開する必要があります。

于 2012-06-05T21:39:53.547 に答える