Это действительно интересный подход. Это похоже на то, что я думал о разделении на части - но, попробовав этот тип вещей, алгоритм имеет тенденцию разбиваться с различными if и исключениями. Спасибо за идею, я буду иметь это в виду!

казалось сложнее, чем я думал. По сути, каждый день снимок главного списка клиентов сбрасывается системой в CSV. Он содержит около 120000 записей и 60 полей. Около 25мб. В любом случае, я хотел бы сообщить о значениях, которые изменяются между одним снимком и другим. Этоне файл плана diff, так как он должен совпадать со значением в крайнем левом столбце, который содержит уникальный номер клиента. Строки могут быть вставлены / удалены и т. Д. Все поля являются строками, включая ссылочный номер.

Я написал решение для LINQ, но оно умирает с большими наборами данных. Для 10000 записей это занимает 17 секунд. Для 120000 сравнение двух файлов занимает около 2 часов. Прямо сейчас он использует отличные и бесплатные «filehelpers»http://www.filehelpers.com/ чтобы загрузить данные, это займет всего несколько секунд, а затем. Но определить, какие записи изменились, более проблематично. Ниже приводится запрос 2 часа:

    var changednames = from f in fffiltered
                       from s in sffiltered
                       where f.CustomerRef == s.CustomerRef &&
                       f.Customer_Name != s.Customer_Name
                       select new { f, s };

Какой подход вы бы порекомендовали? Я хотел бы немедленно «обрезать» список тем, у которых есть какое-то изменение, а затем применить мои более конкретные сравнения к этому небольшому подмножеству. Некоторые из моих мыслей были:

а) Используйте словари или Hashsets - хотя ранние тесты действительно не показывают улучшения

б) Разделите операции на части - используйте первый символ в поле ссылки на клиента и сопоставляйте его только с теми, у кого такой же. Вероятно, это включает в себя создание множества отдельных коллекций и выглядит довольно не элегантно.

в) отойти от типизированного расположения данных и сделать это с массивами. Опять же, польза неясна.

есть идеи?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос