LINQを使用してかなり大きなデータセットを生成する必要がある場合は、しばらく時間がかかる場合があります。 )% '年齢の使用に関するフィードバックを生成しますが、これを行う簡単な方法がありますか?大規模データセットでLINQ式を実行しているときの進捗状況を報告するには
var pairs = from car in A
from truck in B
where car.color==truck.color
select new {car, truck};
:
例は、私が1000台のトラックで1000台の車とリストBを持つリストAを持っていると私はcar.color == truck.colorリンクこのすべての可能な注文(車、トラック)のペアを選択するようにしたいと言います
これは、ある時点でネストされたforeachループのセットとして評価されます。私はそれが介入し、理想的にはプログレスバーまたは何かを更新するので、完了年数%を報告できるようにしたいと思います。
編集:私はこれを実行していますので、私はこれを行う
mPairs = pairs.ToList();
:ちょうど私のクエリの後、私は(実行するクエリを強制的に)このようなリストとしてメンバ変数に結果を格納しますUIスレッドが要求に応じてLINQ式を評価するときに、UIスレッドがフリーズするのをやめたいからです(これはSilverlight BTWにあります)。ですから、私は進捗状況を報告したいのですが。 UXは、基本的にこれは:
- ユーザがワークスペース
- 上にアイテムをドラッグエンジンは、ワークスペース上の他の項目のすべてに(多くの)接続の可能性を決定するために、バックグラウンドスレッド上に蹴ります。
- エンジンが計算中に新しい接続が許可されず、新しい項目が他の項目に「接続可能」になる(LINQ経由で未使用の接続パスがすべて決定された)ことを示すレポートが表示されます。
- エンジンが計算(クエリ)を完了すると、その項目はUIで接続可能であり、将来の使用のために可能な接続パスがローカル変数に格納されます(たとえば、ユーザーがアイテムを接続するためにクリックすると、 (同様のプロセスは、項目の削除で発生しなければならない)、それを添加した場合
)を算出したものに基づいて、ハイライト
私はこのアプローチが本当に好きです。私のLINQ式はいくつかのネストされたfromから成り立っています - これは少なくとも最外部のリストの周りに置くことができます(少なくとも頻繁な更新のオーバーヘッドが発生しないように、おそらくすべて必要です)。 – caryden