Ich habe eine Liste von Objekten, die ich auf nur diejenigen reduzieren möchte, die Eigenschaften in einer separaten Liste enthalten.Enthält auf Liste ist zu langsam, wie zu verbessern?
List1 ist eine Liste einfacher Strings.
List2 ist eine Liste von Objekten mit zwei String-Eigenschaften. A und B.
Alle Elemente, bei denen A und B in Liste1 nicht vorhanden sind, sollten entfernt werden.
Dieser Prozess ist sehr zeitabhängig und muss so schnell wie möglich durchgeführt werden. Derzeit habe ich die folgende Implementierung;
var List1 = new List<String>() {"Around", "9000", "strings"}; //List of about 9000 strings
var List2 = databaseList.ToList(); //Around 2.5 million objects
var reducedList = new HashSet<Object>();
foreach (var item in List2)
{
if(List1.Contains(item.A) && List1.Contains(item.B))
{
reducedList.Add(item);
}
}
Dieser Vorgang dauert etwa 7 Sekunden, was für meine aktuellen Anforderungen zu langsam ist.
Ich habe versucht, dies mit LINQ ausführen, gibt aber das gleiche Ergebnis, etwa 7 Sekunden.
var reducedList = List2.Where(r => List1.Contains(r.A)).Where(r => List1.Contains(r.B)).ToList();
Irgendwelche Vorschläge, was ich tun kann, um dies zu verbessern?
EDIT: Ich kann keine dieser auf der SQL-Seite der Dinge tun, da die 9000 Zeichenfolgen, die ich gegen vergleichen müssen nicht „übersetzt“ werden kann in und SQL-Abfrage, aber über dem erlaubten 2100 gehen Eingabeparameter, die in unserem SQL Server Setup erlaubt sind.
[HashSet] (https://www.google.com/search?q=hashset&ie=utf-8&oe=utf-8). –
Wie lange dauert es, ** nur ** eine "foreach" über alle Elemente in der Datenbank zu machen? Takten Sie auch die 'foreach'-Schleife oder die beiden Initialisierungsanweisungen? –
Die foreach over databaseList, die über 2,5 Millionen Objekte enthält, stört mich; Geben Sie auch den Namen (databaseList) an Sind Sie sicher, dass Sie keine Abfrage auf db-Ebene durchführen können? –