現在、私は7,000のビデオエントリを持っており、タグと女優を検索するのに苦労しています。LINQリスト内のリストにオブジェクトが存在するかどうかを調べるための最適化
これは私が修正しようとしているコードです。私はHashSetを使ってみました。それは私が初めてそれを使用しているが、私はそれを正しくやっているとは思わない。
Dictionary dictTag = JsonPairtoDictionary(tagsId,tagsName);
Dictionary dictActresss = JsonPairtoDictionary(actressId, actressName);
var listVid = new List<VideoItem>(db.VideoItems.ToList());
HashSet<VideoItem> lll = new HashSet<VideoItem>(listVid);
foreach (var tags in dictTag)
{
lll = new HashSet<VideoItem>(lll.Where(q => q.Tags.Exists(p => p.Id == tags.Key)));
}
foreach (var actress in dictActresss)
{
listVid = listVid.Where(q => q.Actress.Exists(p => p.Id == actress.Key)).ToList();
}
私は、それはタグが各VideoItemについて
を存在する場合、それはList<Tags>
を持っており、私が使用をチェックするループを通過しますdb.VideoItems.ToList()
を使用してDB内のすべてのビデオを取得する最初の部分タグが一致するかどうかを確認するために '存在'します。
次に女優と同じこと。
私はデバッグモードになっていて、ApplicationInsightがアクティブであるが遅いので、わかりません。そして、私はそれがまだデータベースに接続していることを意味するかどうかわからないbaseType:RemoteDependencyData
で毎秒10〜15回のイベントになるでしょう(私はすべてのビデオの新しいリストを乱すべきであるからではありません)。
7分後、まだ処理されていて、それは私が待っていた最長時間です。
私は、これはお菓子
すべてのタグまたは任意のタグに一致する必要がありますか? –
あなたはどのようなデータベースを引き出していますか? 'db.VideoItems'の型は何ですか?私は絶対にToList()を介してすべてのビデオを引っ張ってLINQでフィルタダウンしないでください - あなたが行う必要がある場合にのみ、データベースで索引付けされたアイテムを使用してLINQを使用してインテリジェントなクエリを構築しますデータプロバイダが実行できない非常に高度なフィルタリング。 – PMV
私は 'db.VideoItems.Where(q => q.Tags.Exists(p => p.Id == 90));' #90は、私がテストしている単なるサンプルタグです。 それはずっと速かった、私の問題は、データベースにないサーバーに検索の負荷をかけていたと思う。 私の問題は、2つまたは3つのタグが女優のコードにも当てはまる可能性があるため、どのようにしてプロセスを繰り返すことができるのかです。 –