Список1 — это список простых строк.
List2 — это список объектов, содержащий два строковых свойства; A и B.
Все элементы, где A и B отсутствуют в списке 1, должны быть удалены.
Этот процесс очень зависит от времени и должен быть максимально быстрым.
В настоящее время у меня есть следующая реализация:
Код: Выделить всё
var List1 = new List() {"Around", "9000", "strings"}; //List of about 9000 strings
var List2 = databaseList.ToList(); //Around 2.5 million objects
var reducedList = new HashSet();
foreach (var item in List2)
{
if(List1.Contains(item.A) && List1.Contains(item.B))
{
reducedList.Add(item);
}
}
Я пробовал запустить это с помощью LINQ, но результат тот же, около 7 секунд.
Код: Выделить всё
var reducedList = List2.Where(r => List1.Contains(r.A)).Where(r => List1.Contains(r.B)).ToList();
РЕДАКТИРОВАТЬ:
Я не могу сделать это со стороны SQL, поскольку 9000 строк, с которыми мне нужно сравнить, не могут быть «переведены» в SQL-запрос, но будут превышать разрешенные 2100 входных параметров, которые разрешены. в нашей настройке SQL Server.
Подробнее здесь: https://stackoverflow.com/questions/340 ... to-improve
Мобильная версия