Мне нужно улучшить производительность настольного приложения (.net), которое было разработано для чтения базы данных и создания XML-файлов на основе XBRL (расширяемый язык отчетности Bussiness).Он использует UBMatrix для создания таксономий XBRL.
Приложение работает нормально, если размер определенных данных невелик.Но для создания файлов приложению потребуется более 30 минут, если объем данных большой.Данные клиента всегда огромны / велики.Таким образом, приложению требуется больше времени для генерации файлов.
Моя задача - оптимизировать приложение, чтобы сократить время, затрачиваемое на создание XML-файлов.Когда я проверил приложение, я обнаружил, что приложение работает таким образом.
Запускает
- Создание соединения с БД
- получает первый набор данных (этотаблица (table1) слишком большая).И запрос вернет около 15-30 K строк в dataTable
- для цикла 0 в datatable.Rows.count
- проверяет некоторые условия
- получить данные из базы данных.(эта таблица (таблица2) также слишком велика, чем (таблица1).
- отправка данных в форму xbrl и запись в xml (это выполняется сторонним приложением под названием UBMatrix). Редактировать код невозможнокоторый создает файл xbrl-xml.
Аналогичным образом будет обрабатываться 3–4 набора данных
По моим наблюдениям, мы можем избежать вызовов БД дляцикл. Получить все данные до цикла. Когда я проверил запросы, были подзапросы, не существует (выберите * из таблицы) и т. д. можно заменить на объединения, не существует (выберите 1 из таблицы)
НоТем не менее, приложение должно обрабатываться в цикле. Я также думаю об использовании потоков, чтобы я мог создавать потоки на основе размера данных и обрабатывать их одновременно.
Например
- если есть 100 строк. будет 100 записей в xml-файле (XBRL)
- Так что я сделаю 50,50 и запустлю два потока, которые сгенерируют два xml-файла. В конце я объединю два водин XML-файл.
Таким образом, обработка 0-го вопроса и 50-го вопроса может быть начата одновременно.В настоящее время в цикле for 0th будет обрабатываться, а 99th - только в конце.Я не уверен насчет идеи.Может ли кто-нибудь предложить / поделиться своими идеями.любая помощь будет оценена.Заранее спасибо