Начало » Использование СУБД » Firebird, HQbird, InterBase » IRequest против IStatement (по скорости)
IRequest против IStatement [сообщение #4014] |
Tue, 09 January 2024 20:12 |
SD
Сообщений: 411 Зарегистрирован: August 2022
|
Senior Member |
|
|
Был у меня такой код:
// Just insert the record
if (!data->stmt)
{
std::string query("INSERT INTO \"");
query += table.name;
query += "\" (";
query += table.fields;
query += ") VALUES (?";
for (unsigned i = 1; i < metadata->getCount(data->status("Get fields count")); i++)
{
query += ",?";
}
query += ')';
data->stmt.reset(data->tgtAtt->prepare(data->status("Prepare insert statement"), data->tgtTra.get(), query.size(), query.c_str(), SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_NONE));
}
data->stmt->execute(data->status("Execute insert statement"), data->tgtTra.get(), metadata, dataBuffer.get(), nullptr, nullptr);
Поменял я его на вот такой.
if (!data->req)
{
data->req.reset(data->tgtAtt->compileRequest(data->status("Prepare insert statement"), blr->size(), blr->data()));
data->req->startAndSend(data->status("Execute insert statement"), data->tgtTra.get(), 0, 0, dataLength, dataBuffer.get());
}
else
{
data->req->send(data->status("Execute insert statement"), 0, 0, dataLength, dataBuffer.get());
}
Вся прочая обвеска осталась той же. Результат - работает на четверть быстрее. Что может в DSQL быть тормозом? Разбор MessageMetadata?..
|
|
|
Переход к форуму:
Текущее время: Sun Nov 24 01:13:11 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01214 секунд
|