Столкнулся с такой проблеммой:
Имеются n кол-во *.xls (Excel) файлов. Каждый файл могет содержать от 100 до 10000 строк.
Поочередно из этих файлов производится построчное считывание значений ячеек каждой строки (кол-во ячеек в строке до 10 шт) и запись их в БД.
Функция для получения значения ячейки:
Код: Выделить всё
Variant __fascall TForm:fromExcelCell(int Row, int Column)
{
try{ Variant result, cur;
cur = Sh.OlePropertyGet("Cells", Row, Column);
result = cur.OlePropertyGet("Value");
return result;
} catch(...) {;}
return 0;
}
Код: Выделить всё
...
for(int i=0; i<CountRowExcel; i++)
{
IBDataSet->Insert();
IBDataSet->FieldByName("1")->AsString = fromExcelCell(i+1, col_1);
...
IBDataSet->FieldByName("n")->AsString = fromExcelCell(i+1, col_n);
IBDataSet->Post();
}
В начале заполнения БД (в БД нет записей) процесс занесения записей протекает быстро (например 3500 строк заносится в БД примерно за 10 мин)(<строка в *.xls [ячейка_1],[ячейка_2],[ячейка_3]...[ячейка_N]> == <запись в БД [поле_1],[поле_2],[поле_3]...[поле_N]>).
Но с увеличением количества записей в БД до 45000 скорость записи данных в БД заметно снижается (из 6000 строк заносится в БД всего 400 строк и это только за 1 час) при этом процесс ibserver.exe дает загрузку центрального процессора 99 %.
Подскажите пожалуйста, что-бы это могло быть и как это можно обойти? Есть-ли способ как можно оптимизировать?.
Большое спасибо.
С Уважением, Дмитрий.