私はここで問題を抱えていますが、最近では、高速なアクセスのためにキャッシュに追加する必要がある記事の全リストを取得しようとしているときに、この問題がWebプロジェクト(Sitefinityで作成) 。C#Double Foreachの最適化
私は、Taxonに存在する特定のカテゴリに属する記事の全リストを取得するためにいくつかの天才的な開発者XDが使用されていることがわかりました(このカテゴリの種類を認識するsitefinityの一部のプロパティ:Pregnant - Babies - kids ...あなたはアイデアを持っている)、記事(タイトル、イメージ、スタイル、テキスト)についての情報を持っている動的なコンテンツを持つアイテムコレクションでいくつかの検索を行う必要があります。
私の問題は、ForEachを使用した二重ループの研究でそれを行いました。私の上司はそのループを「最適化」したいのですが、そのループを行うのに時間がかかりすぎます。 3〜4分以上、そして私の上司は即座にそのプロセスを望んでいます:))。ここ
はコードです:
foreach (HierarchicalTaxon subt in listWeek)
{
foreach (DynamicContent item in myCollection)
{
if (item.Organizer.TaxonExists("Category", subt.Id))
{
item.Author = subt.Name;
//if (articles.Where(art => art.Author.Equals(item.Author)).Count() == 0)
articles.Add(item);
}
}
}
だから私はこの2^n個の実装があり、この二重のループに対処する必要があり、私の質問は、私はそれを行うことができますどのように、されます?!?!?!
私は他のスレッドで見たようにいくつかのLINQを追加しようと考えていましたが、この実際のコードよりも遅すぎるようです。
myCollectionは長い要素セットを持っていないようですが、他のプロジェクトで同じロジックを持つ他の文でこの種の最適化を使用する必要があります。
お元気ですか、ちょっと戻ってきてしまいますが、早くできるのですか?
ここで私たちは行く、あなたはどう思う?
var data = listWeek.ToDictionary(x => x.Id, x => x.Name);
var iDdata = data.Keys;
var nombresData = data.Values;
foreach (DynamicContent item in myCollection)
{
if (item.Organizer.TaxonExists("Category", iDdata.First()))
{
item.Author = nombresData.First();
articlesPrueba1.Add(item);
}
}
編集:16/08/2016 - >現在動作していない、まず第一に、私は辞書の値にアクセスしようとしているとき、私はトラブルを得たので、私はIDの別々の変数に添付して、名前、私はそれを行う必要があると思うが、私はそれについては分かりません。
しかし、私はこの問題を抱えていました。辞書データの内容を一周しているだけですが、それは明らかですが、うまくいくと思っていましたが、残念ながらそれはありませんでした。
私はLINQを使用しようとしていた。
foreach (HierarchicalTaxon subt in listWeek)
{
foreach (DynamicContent item in myCollection.Where(item => item.Organizer.TaxonExists("Category", subt.Id)))
{
item.Author = subt.Name;
articlesPrueba2.Add(item);
}
}
}
を私はデータベースにアクセスしていないクエリについては、この例外が発生しましたが、Sitefinityあなたのいまいましい、私は用事あなたを憎む...しかし、私はドン本当にLINQについて気にしない。
まだ深刻な最適化問題があります。
私はここでプロファイラが何を言っているのか興味があります。ネストされたループが問題であると仮定していますが、このコードには非効率性についての多くの機会があり、常に測定可能なものを見ずに良い答えを出すのは難しいです。 –
私はデバッグしていましたが、最初はキャッシュだったと思いますが、プロジェクトがロード・コンテンツにもっと時間を要していたブレーク・ポイントを探していました。このcontentServiceを隔離しました。foreachループはlistWeekと私が必要とする適切な内容の記事のコレクションを手に入れるのに時間がかかりすぎた、私のコレクションオブジェクト。でも、このプロジェクトでは2013年以来、わずか1ヶ月後からサポートをしています。私はそれがどれほど大きいかという考えを持っていると思います。 – dato000
しかし、ネストされたループか、あるいは 'TaxonExists'メソッドか、' articles.Add'を呼んでいるかどうかは分かりません。プロファイラーを使用して確認し、測定値に基づいて最適化します。いったんこれを行うと、ネストされたループであると判明した場合、以下の辞書の提案が役立ちます。 –