- Регистрация
- 17.09.2011
- Сообщения
- 262
- Благодарностей
- 25
- Баллы
- 28
Подскажите пожалуйста можно ли как-то ускорить код? Выполняется довольно долго. Может изменить логику?
Коротко суть: есть 2 списка, берем строку из списка1, получаем значение до разделителя ";". Проверяем строки по этому значению в списке2, если строка есть удаляем её. Затем записываем строку списка1 целиком в список2.
В C# не очень шарю, помогал Chatgpt.
В списке1 примерно 100-1 000 строк вида: значение1;значение2;значение3;значение4;значение5..значениеN
В списке2 примерно 200 000++ строк вида: значение1;значение2;значение3;значение4;значение5..значениеN
Коротко суть: есть 2 списка, берем строку из списка1, получаем значение до разделителя ";". Проверяем строки по этому значению в списке2, если строка есть удаляем её. Затем записываем строку списка1 целиком в список2.
В C# не очень шарю, помогал Chatgpt.
В списке1 примерно 100-1 000 строк вида: значение1;значение2;значение3;значение4;значение5..значениеN
В списке2 примерно 200 000++ строк вида: значение1;значение2;значение3;значение4;значение5..значениеN
Код:
IZennoList list2base = project.Lists["List2base"];
IZennoList list1queue = project.Lists["List1queue"];
lock (SyncObjects.ListSyncer) {
// Логирование начала обработки
project.SendToLog("Начало обработки списков", LogType.Info);
// Перебираем элементы из list1queue
foreach (var queueItem in list1queue) {
string value1FromQueue = queueItem.Split(';')[0]; // Извлекаем значение1 из строки list1queue
project.SendToLog($"Обработка строки из List1queue: {queueItem}", LogType.Info);
bool foundAndRemoved = false; // Флаг для отслеживания удаления
// Перебираем элементы из list2base для сравнения и удаления
for (int i = 0; i < list2base.Count; i++) {
string value1FromBase = list2base[i].Split(';')[0]; // Извлекаем значение1 из строки list2base
// Если значение1 совпадает, удаляем строку из list2base
if (value1FromBase == value1FromQueue) {
project.SendToLog($"Удаление совпадающей строки из List2base: {list2base[i]}", LogType.Info);
list2base.RemoveAt(i);
i--; // Корректируем индекс после удаления
foundAndRemoved = true;
}
}
if (!foundAndRemoved) {
project.SendToLog("Совпадений не найдено, строка добавляется без удаления предыдущих", LogType.Info);
}
// Добавляем взятую строку из list1queue в list2base
list2base.Add(queueItem);
project.SendToLog($"Добавлена строка в List2base: {queueItem}", LogType.Info);
}
// Логирование завершения обработки
project.SendToLog("Обработка списков завершена", LogType.Info);
}