powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Особенности чтения блоб полей в кодироваке UTF8 (FIBPlus)
1 сообщений из 1, страница 1 из 1
Особенности чтения блоб полей в кодироваке UTF8 (FIBPlus)
    #39781163
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Была переведена база Firebird на UTF8. При запуске программы с подключением к этой базе через FIB есть участок кода, который читает много блоб-данных как строку. До перехода на UTF8 этот участок выполнялся до 1сек, после перехода - около 10сек. Был найден тот код, который стал отрабатывает медленно:
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TFIBBlobStream.OpenBlob;  {  FIBMiscellaneous  }
...
    if FDatabase.NeedUTFEncodeDDL   then
     FIBMiscellaneous.ReadBlob(FDatabase.ClientLibrary,@FBlobHandle, FBuffer, FBlobSize,CallBack)
    else
     FIBMiscellaneous.OldReadBlob(FDatabase.ClientLibrary,@FBlobHandle, FBuffer, FBlobSize,CallBack);


т.е. раньше выполнялось OldReadBlob, а сейчас ReadBlob. Сравнив код этих процедур стало понятно, что в OldReadBlob при условии
Код: pascal
1.
while (AllReadBytes<BlobSize) do


блобы с размером 0 просто не участвуют в isc_get_segment. Если вставить условие и отсеять блобы с размером 0 в процедуру ReadBlob, то выполнение сокращается опять до 1сек. Но смущает участок кода в процедуре ReadBlob:
Код: pascal
1.
2.
   if vBlobSize=BlobSize then
     SegLen:=0


т.е. тут либо получение пустых блобов было задумано, либо это условие срабатывает при повторе цикла.

Может кто сталкивался или просто знает этот код, можно ли в процедуре ReadBlob не читать пустые блобы?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Особенности чтения блоб полей в кодироваке UTF8 (FIBPlus)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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