Это действительно интересный подход. Это похоже на то, что я думал о разделении на части - но, попробовав этот тип вещей, алгоритм имеет тенденцию разбиваться с различными 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 - хотя ранние тесты действительно не показывают улучшения
б) Разделите операции на части - используйте первый символ в поле ссылки на клиента и сопоставляйте его только с теми, у кого такой же. Вероятно, это включает в себя создание множества отдельных коллекций и выглядит довольно не элегантно.
в) отойти от типизированного расположения данных и сделать это с массивами. Опять же, польза неясна.
есть идеи?
Спасибо!