Оптимизация выборки данных из таблицы
Добрый день! Есть необходимость оптимизировать работу с таблицами. Конкретный пример.
Передо мной стоит задача синхронизировать данные по пользователям с корпоративного портала с их учётными записями в Active Directory. Это реализовано, но работает крайне медленно. Что сделано:
1) Реализовано получение данных по пользователям посредством API портала
2) Сборка данных в таблицу (объект DataTable)
3) Связываю я пользователей по уникальному ID, который есть у каждого в его профиле на портале. В связи с этим после 2-го пункта я выдёргиваю всех пользователей из AD, у кого атрибут, в который я помещаю ID заполнен.
4) Получаю разницу между ID пользователей из портала и ID пользователей из AD (массив)
5) Вот тут, собственно, затык в части оптимизации. Очень долго осуществляется выборка и формирование хэш-таблицы (id, samaccountname), с помощью которой я меняю атрибуты пользователей. Каким образом это делается сейчас:
Разница из п. 4 итерируется и на основании свойства ID из таблицы (п. 2) формируется хэш-таблица.
Для сравнения команда:
$table.ForEach({$hashtable.add($_.id,$_.login)}) формирует хэш-таблицу за секунду. Пользователей в $table порядка 5000. У каждого пользователя по 15 атрибутов. То есть мы имеем ~5000 строк и 15 столбцов. Задача сводится к тому, чтобы, например, я из существующей таблицы мог сформировать новый аналогичный объект (таблица), который будет содержать данные в соответствии с фильтрами. В данном примере мне нужно выдернуть из таблицы все строки, у которых значения в колонке ID будут равны значениям из п. 4. Возможно ли сравнивать не по одной, а нескольким колонкам? Спасибо