2010-08-06 2 views
2

Я знаю его общий вопрос, заданный несколько раз на SO. Но помогите мне в любом случае. На самом деле мне приходится загружать данные с моего локального компьютера в удаленную базу данных sql. В удаленной базе данных sql есть одна таблица, в которой имеется 800 000 записей. Теперь отсюда у меня в локальной системе около 121311 записей, из которых 75% записей уже существует в удаленной базе данных, но мы точно не знаем, какие записи. Мы проверяем наш номер, используя уникальный код DCNNumber. Если DCN существует на сервере, то исключить else insert.Фильтрация записей из общего списка <string>

Так что я сделал то, что я собрал все DCN из моей удаленной базы данных в XML, используя Dataset. Только XML становится файлом размером 24 МБ. Из моих локальных текстовых файлов я разбираю выталкивание 1.2 lacs записи в общий список. Также XML DCN добавляется в общий список строк.

Затем эти два списка сравниваются, используя if (! LstODCN.Contains (DCNFromXML)) {lstNewDCN.Add (item)};

Но этот код занимает почти час для выполнения и фильтрации записей. Поэтому мне нужен оптимальный способ фильтрации такой огромной фигуры.

ответ

2

Загрузить все результаты в HashSet<string> - это будет много быстрее при контрольной сдерживанию.

Вполне возможно, что LINQ бы также сделать это проще, но я несколько запутался, именно то, что происходит ... Я подозреваю вы можете просто использовать:

var newDCNs = xmlDCNs.Except(oldDCNs); 
1

В дополнение к ответу Джона : использование набора данных XML для передачи данных с сервера, вероятно, является плохой идеей, поскольку XML - очень подробный формат. Использование формата плоского файла + сжатие было бы намного более эффективным.

Смежные вопросы