Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Про SQlite
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой тормозов при выполнении 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++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2007, 19:01 |
|
||
|
Про SQlite
|
|||
|---|---|---|---|
|
#18+
nRetCode = ::sqlite3_step( pStmt ); А зачем степ? Там же просто execute есть (хотя, может забыл что...). И в транзакцию одну все это объедини. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 06:45 |
|
||
|
Про SQlite
|
|||
|---|---|---|---|
|
#18+
Серж, thanks за идею с транзакцией. exequte() действительно есть, но это всего-лишь "обёртка" над функциями prepare() и step() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 10:03 |
|
||
|
Про SQlite
|
|||
|---|---|---|---|
|
#18+
Серж - огромное спасибо - завернул всё это в транзакцию - работает быстрее пули! Только интересует "теория вопроса" - насколько я помню транзакции в таких "крутых" серверах как MS-SQL и Oracle тормозят производительность... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=54&msg=34494614&tid=2009521]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 428ms |

| 0 / 0 |
