Ich habe ein Problem hier, vor kurzem fand ich dieses Problem mit einem Web-Projekt (erstellt in Sitefinity), wenn ich versuche, eine ganze Liste von Artikeln, die ich im Cache für einen schnelleren Zugriff hinzufügen müssen .C# Double Foreach Optimierung
Ich habe festgestellt, dass einige Genie Entwickler XD verwendet, um die gesamte Liste der Artikel, die zu bestimmten Kategorie, die in der Taxon (einige Eigenschaft von Sitefinity, die diese Art von Kategorie ex erkennt erkennt: Schwangere - Babys - Kinder ... Sie haben die Idee), und müssen einige Suche in einer Artikelsammlung mit dynamischen Inhalten, wo hat die Informationen über die Artikel (Titel, Bilder, Stile, Texte).
Nun, mein Problem ist, dass sie es mit einer doppelten Schleife Forschung mit ForEach getan haben, und mein Chef möchte diese Schleife "optimieren", denn natürlich dauert es zu lange, um diese Schleife zu machen (manchmal kann es sein mehr als 3 oder 4 Minuten, und ja, mein Chef möchte diesen Prozess sofort haben :)).
hier ist der Code:
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);
}
}
}
Also muss ich mit dieser Doppel-Loop befassen, die diese 2^n Implementierung hat, meine Frage ist, wie kann ich es tun?!?!?!
Ich dachte über das Hinzufügen einiger LINQ, wie ich in anderen Threads sah, aber es scheint viel zu langsam als dieser tatsächliche Code.
Es sieht so aus, dass myCollection nicht viele Elemente enthält, aber ich bin ziemlich sicher, dass ich diese Art der Optimierung in anderen Sätzen mit derselben Logik in anderen Projekten verwenden muss.
bitte Jungs, ein wenig Unterstützung würde geschätzt werden, ist es möglich, es schneller zu tun ??
Also hier gehen wir, was denkst du Leute, ist das ok?
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);
}
}
Edit: 16/08/2016 -> Nicht gerade arbeiten, zunächst einmal, ich Probleme habe, wenn ich versuche, die Werte des Wörterbuch zugreifen, so lege ich in separaten Variablen für Id und Name, ich denke, das sollte es tun, aber da bin ich mir nicht sicher.
Aber dann hatte ich dieses Problem, macht nur eine Runde in den Inhalt der Wörterbuchdaten, es scheint offensichtlich, aber ich dachte, dass würde funktionieren, aber leider, tat es nicht.
Ich habe versucht, LINQ zu verwenden:
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);
}
}
}
aber ich habe diese Ausnahme um die Abfrage auf die Datenbank zugreift, verdammt Sitefinity, ich hasse dich ... Aber macht nichts, ich don Es interessiert mich nicht wirklich an LINQ.
immer noch in ernsthaften Optimierungsproblem.
Ich würde mich interessieren zu sehen, was ein Profiler hier sagt. Sie gehen davon aus, dass die verschachtelten Schleifen das Problem sind, aber es gibt viele Möglichkeiten in diesem Code für Ineffizienzen, und es ist schwer, Ihnen eine gute Antwort zu geben, ohne zu sehen, was messbar die ganze Zeit dauert. –
Nun, während ich debugging, meine erste Vermutung war es der Cache, aber dann war ich auf der Suche nach Breakpoints, wo das Projekt mehr Zeit in load Inhalt nahm, und ich habe diese ContentService isoliert, wo die foreach Schleife listWeek und überprüfen muss Meine Collection-Objekte, wo es zu lange gedauert hat, um die Sammlung von Artikeln mit dem richtigen Inhalt zu bekommen, die ich brauche. Aber gut, du hast Recht, es könnte viele andere Probleme geben, ich bin neu in dieser Abteilung, unterstütze seit etwas mehr als 1 Monat, von diesem Projekt, das seit 2013 läuft !!! Ich denke, die Idee, wie groß es ist. – dato000
Verstanden - aber Sie wissen nicht sicher, dass es die verschachtelten Schleifen ist, oder vielleicht die 'TaxonExists' Methode oder sogar' articles.Add' aufrufen. Verwenden Sie einen Profiler, um sicherzustellen, und optimieren Sie dann basierend auf Messungen. Sobald Sie das tun, sollten die folgenden Wörterbuchvorschläge helfen, wenn es sich um die verschachtelten Schleifen handelt. –