Здравствуйте коллеги.
Столкнулся с проблемой.
Хочу при старте программы, в функции OnStart... очистить список 1(1,7 млн строк) от значений из списка 2(130 к строк), что бы затем многопоточно запустить парсинг по тем ссылкам, по которым ранее не парсилось ничего.
Какая сейчас проблема:
Из обоих файлов ссылки закидываю в списки, и в функции foreach перебираю ссылки из списка 2, удаляя каждую из них из списка 1, но это занимает катастрофически много времени. Уверен, что это можно сделать кодом.
Нашел следующий пример на js:
let a = [1,2,3,4,5,6,7,8,9,10];
let b = [6,7,10];
let c = a.reduce( (acc, item) => {
if (!b.includes(item)) acc.push(item);
return acc;} , []);
console.log(c);
Который на выходе даёт такой результат:
[
1,
2,
3,
4,
5,
8,
9
]
Протестировал этот код в кубике, и получил точно такой же результат.
Немного модифицировал код, и протестировал на небольшом объёме ссылок:
[[SSILKI_DLYA_OBRABOTKI]] = [[SSILKI_DLYA_OBRABOTKI]].reduce( (acc, item) => {
if (![[SPARSHENNIYE_TOVARY]].includes(item)) acc.push(item);
return acc;} , []);
В изначальном примере было 3 переменных, но в боевом коде решил использовать 2, что бы не плодить их.
На небольшом объёме всё четко и очень быстро сработало.
Когда зарядил весь объём, и запустил проект всё к херам зависло, и х.з. как обработать эти огромные списки. При этом ведь они могут в других проектах быть и больше.
Можно конечно пойти другим путем, и просто удалять из ресурса уже спаршенные ссылки, однако хотелось бы иметь возможность действовать именно таким образом.
Подскажете выход?
Если нужно, могу приложить проект, и файлы со ссылками, но надеюсь кто-то уже подобную проблему решал, и просто даст образец кода, который всё это быстро обрабатывает, и не приводит к зависанию.