Задать вопрос
@KrivdaKravdaBum

Локальный клиент парсинга XML и обновления SQLite таблицы (C#). Возможно ли оптимизация?

Написан клиент обновления таблицы в БД SQLite. Скачивает XML с сервера, парсит и обновляет данные в таблице. XML содержит > 40000 строк (и каждый месяц количество строк увеличивается), такого вида:
<card card="05871" article="0016" count="1" timestamp="1519134555"/>

Встал вопрос об оптимизации данного действия, потому как на обновление таблицы уходит минимум 2 минуты. Изначально написан на C#. Хочу переписать всё на C++. Стоит ли такое делать, будет ли какое-то ускорение?
  • Вопрос задан
  • 171 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Сначала надо попрофилировать, на что конкретно уходит много времени.
Если именно на "обновление таблицы" (тобишь на выполнение SQL-запросов) - то переписывание ничего не даст - надо что то делат ьс базой или с запросами.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
Встал вопрос об оптимизации данного действия, потому как на обновление таблицы уходит минимум 2 минуты.

Ну это известный прикол что по-умолчанию SQlite делает транзакцию на каждый insert. Запустите транзакцию и закоммитьте её один раз и все строки вставятся за секунду максимум.

Вы начали выдумывать какие-то мегаспособы ускорения, не исследовав корень проблемы. А корень в том, что на транзакцию SQLite создаёт файл отката, и когда таки транзакций 40000, это будет столько же операций пересоздания файла. Это просто пздц какая тяжелая операция для файловой системы, и ни процессор ни многопоточность вообще не при чём. Могли бы догадаться сами, т.к. 40000 небольших записей это вообще не объём.

Решение гуглится за 20 секунд и написано в FAQ по SQLite: www.sqlite.org/faq.html#q19
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы