|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.09.2024, 13:34 | #1 |
Новичок
Джуниор
Регистрация: 19.09.2024
Сообщений: 3
|
Добавление данных в FB Embedded в несколько потоков.
На Windows 7 x64 написанная на Delphi 6 утилита читает много больших текстовых таблиц и помещает данные из них в таблицу FB Embedded 2.5 для последующего анализа. Процесс не очень быстрый, появилась идея попробовать его распараллелить. Но первый же тест привел в уныние:
Код:
Button2Click три потока по миллиону записей выполняются 2 мин 35 сек, загрузка CPU 21.5% Складывается ощущение, что все три TIBQuery трудятся в одном потоке, загружая единственное ядро. Есть какая-либо возможность заставить FB Embedded исполнять запросы разных потоков на разных физических ядрах? |
19.09.2024, 15:37 | #2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,646
|
У вас во всех потоках используется одно и тоже подключение IBDatabase1. Попробуйте в каждом потоке создать свое подключение и работать с ним.
E-Mail: arigato.freelance@gmail.com
|
20.09.2024, 08:37 | #3 |
Новичок
Джуниор
Регистрация: 19.09.2024
Сообщений: 3
|
Стало только хуже. Код
Код:
|
20.09.2024, 11:11 | #4 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,646
|
В качестве эксперимента попробуйте переписать код потока примерно так:
Код:
E-Mail: arigato.freelance@gmail.com
|
20.09.2024, 13:35 | #5 |
Новичок
Джуниор
Регистрация: 19.09.2024
Сообщений: 3
|
4 минуты 08 секунд и 11% процессорного времени.
Есть подозрения, что теперь уже прохлаждается даже одно ядро, а процессы стоят в очереди за доступом к файлу. |
20.09.2024, 14:27 | #6 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,646
|
Проблема кроется скорее всего в том, что потоки банально мешают друг другу. Ведь данные хранятся в файле. Нагрузка ЦП тут вообще не показатель, так как узким местом будет именно операции с файлами. Чуть меньше процессор стал нагружаться из-за параметрического запроса.
Можно попробовать отключить Forced Writes командой в CMD: Код:
Эффект прироста производительности может дать пакетная вставка, то есть за один запрос сразу по несколько записей: Код:
E-Mail: arigato.freelance@gmail.com
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перебор данных из бд в несколько потоков | pro100kos | БД в Delphi | 8 | 20.01.2022 09:12 |
Поток запускает несколько потоков | bilibian | Общие вопросы Delphi | 3 | 21.08.2016 11:30 |
Логгирование, несколько потоков | pa6kevi4 | Общие вопросы .NET | 3 | 12.06.2010 22:32 |
[Вопрос] IdHttp в несколько потоков | TilerDerton | Работа с сетью в Delphi | 3 | 22.09.2009 22:14 |
Несколько потоков | Adm | Общие вопросы Delphi | 13 | 18.01.2008 20:04 |