powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Про SQlite
5 сообщений из 5, страница 1 из 1
Про SQlite
    #34493947
Soledad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой тормозов при выполнении insert-ов в SQlite. Версия 3.3, фрагмент кода( максимально укороченный ) привожу:
sqlite3 *pdb;
int nRetCode = ::sqlite3_open( "C:\\ALEX\\work\\MoreSqLite\\BindingTest.dat", &pdb );
if( SQLITE_OK != nRetCode ){
::sqlite3_close( pdb );
return;
}
sqlite3_stmt *pStmt;
char const *lpcszQuery = "insert into task( tid, name, Desk, links ) values( ?, ?, ?, ? )";
nRetCode = ::sqlite3_prepare( pdb, lpcszQuery, -1, &pStmt, 0 );
int nBuferLen( 0 );
//
for( int nc = 0; nc < 256; ++nc ){
int nIDValue = 1;
nRetCode = ::sqlite3_bind_int( pStmt, 1, nIDValue );
wchar_t const *lpcwNameVal = L"short unicode value";
nBuferLen = ::wcslen( lpcwNameVal ) * sizeof( wchar_t );
nRetCode = ::sqlite3_bind_blob( pStmt, 2, ( void const* )lpcwNameVal, nBuferLen, SQLITE_STATIC );
char const *lpcszTextVal = "ansistring value";
nBuferLen = ::strlen( lpcszTextVal ) * sizeof( char );
nRetCode = ::sqlite3_bind_text( pStmt, 3, lpcszTextVal, nBuferLen, SQLITE_STATIC );
wchar_t const *lpcwLink = L"large unicode value";
nBuferLen = ::wcslen( lpcwLink ) * sizeof( wchar_t );
nRetCode = ::sqlite3_bind_blob( pStmt, 4, ( void const* )lpcwLink, nBuferLen, SQLITE_STATIC );
nRetCode = ::sqlite3_step( pStmt );
::sqlite3_reset( pStmt );
}// for
То есть - вставляется 256 записей в таблицу с 4-мя полями( целое, BLOB - туда пишется юникодная строка, обычная строка анси и ещё один БЛОБ для юникодной строки ). И это "молотится" около 10-ти секунд, причём в релизной сборке. Вопрос в том - это тормоза самого движка или неоптимальный код? Сам SQlite собран как .lib - статическая библиотека и просто компонуется с проектом VC++
...
Рейтинг: 0 / 0
Про SQlite
    #34494357
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nRetCode = ::sqlite3_step( pStmt );

А зачем степ? Там же просто execute есть (хотя, может забыл что...).
И в транзакцию одну все это объедини.
...
Рейтинг: 0 / 0
Про SQlite
    #34494614
Soledad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серж, thanks за идею с транзакцией. exequte() действительно есть, но это всего-лишь "обёртка" над функциями prepare() и step()
...
Рейтинг: 0 / 0
Про SQlite
    #34494759
Soledad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серж - огромное спасибо - завернул всё это в транзакцию - работает быстрее пули! Только интересует "теория вопроса" - насколько я помню транзакции в таких "крутых" серверах как MS-SQL и Oracle тормозят производительность...
...
Рейтинг: 0 / 0
Про SQlite
    #34496160
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты сравнил... Оракла и SQLite...
У сабжа каждая отдельная команда выполняется в транзакции всегда. Т.е. у тебя 256 раз выполнилось begin tran, commit tran не говоря о манипуляциях с логом и пр.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Про SQlite
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]