SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » IRequest против IStatement (по скорости)
IRequest против IStatement [сообщение #4014] Tue, 09 January 2024 20:12 Переход к предыдущему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 347
Зарегистрирован: 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?..
 
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: Firebird -a
Следующая тема: На чем переписывать win-приложение для Web?
Переход к форуму:
  


Текущее время: Tue May 14 20:16:47 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00823 секунд