質問

は、実際には、これはこの記事と同じ質問があります:

私は私のDALに呼び出されたときに私のLINQクエリはありません遅れる形で、実行することを確認することができます。

どうですか

しかし、彼はの理由の彼はそれを望んで説明していないことから、質問が少し上を通過されているようです。ここに私のより良い説明と同様の-しかし、問題があります:

私は2つのタイプ(一瞬UIスレッドを無視して)内のスレッドの一握りを持っています。 「データ収集」ねじの種類、および「計算」スレッドのタイプがあります。データ収集のスレッドが遅いです。さまざまな場所からふるいにかけべきデータのかなりのビットがあります。計算スレッドは比較的高速です。この時点まで設計モデルまでは、データを見つけるために、データ収集のスレッドをオフに送信することであり、彼らは計算のためのデータまでを完全に通過しているときます。

私はLINQの中で私のデータ収集をコード化すると

私はのバック私の計算スレッドにその遅さののいくつかを巻き上げ巻き取ります。そこでは、計算の際に使用しているまで完全に解決取得されていない今のデータ要素がある - それが問題だ。

私は、ある時点でその作業を完了するためにLINQを強制したいと思います(文の終わり?方法の終わり?「くそ、仕上げてください」メソッド呼び出し)私は後でそれを払っていないよ知っているように、 。 LINQのの最後に「.ToListを()」を追加1.厄介である、と一瞬とにかく別のスレッドで、非ボックス化されようとしている何かをボクシングのような2感じています。

役に立ちましたか?

解決

あなたはボクシングは何もないだろう - 。あなたは結果をバッファリングすることと思います。

ToList()を使用して基本的に、あなたが実際にデータが必要な場合は移動するための方法です。あなたはすぐにデータを使用する準備が整いました場合を除き、これをバッファリングするために持っているのどこかにの、持っていないこと?リストには、それをするだけの便利な方法です。

の代替は、同様にその場で処理を行うことです - あなたはそれを生産するよう熱心に、データを使用します。私はかなりのものの異なるスレッド側に従わなかったので、それはそれはあなたを助けるかどうか私にははっきりしないが、これらは私の知る限り見ることができるように基本的に使用可能な選択肢があります。

これは実際にはの多少のあなたの説明で明示的に:

  

この時点まで設計モデルアップです   を切ったデータ収集のスレッドを送信します   データを見つけ、彼らは完全にしているとき   計算のためのデータアップを渡します。

ToList()を呼び出すと、基本的には「リストにバッファリングされているデータ自体、」へ「に尋ねたときにデータをフェッチすることができ、問合せ」から戻る何を変更します。

他のヒント

あなたは.ToListが許容できない理由を詳細に説明することはできますか?あなたはボクシングとアンボクシングを述べたが、これらは全く関係のない話題です。

需要が結果を格納する必要に完了するために、LINQクエリを強制の一部。そうでなければ、再び結果を確認するために、クエリをrepprocessする必要があると思います。 .ToListを効率的List<T>の要素を格納することによってこれを達成します。

これは、より良いあなたのニーズに合わせて様々なトレードオフで、事実上、他のコレクションスタイルデータ構造内の要素を格納することが可能です。

あなたはもっと熱心にデータをフェッチ助けることができるLoadOptionsクラスのDataContextプロパティがあります。

他のあなたは、いくつかの巧妙な配置ToList()さんを使用することができます。

私はこのスレッドが古いです知っている...とにかく、面白い誰がまだ.ToLast()を言及していません。 私は、LINQは、私は本当に私が必要以上に偽のメモリを割り当てたくなかった...クエリ結果を気にしないいくつかの副作用を駆動する見せかけのforeachよりもはるかに多くのではない何かをやっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top