Странный эффект у SCTL_CREATE

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Странный эффект у SCTL_CREATE

Post by Shmuel »

Очередная головоломка. Для воспроизведения нужен плагин RESearch.
  1. local guid = win.Uuid("F250C12A-78E2-4ABC-A784-3FDD3156E415") -- RESearch
  2.  
  3. local t1=os.clock()
  4.  
  5. local obj = far.CreateSettings(guid)
  6.  
  7. t1=os.clock()-t1
  8.  
  9. obj:Free()
  10.  
  11. far.Message(t1)
Данный скрипт можно сделать макросом, либо поместить в файл и запускать с помощью lm:post.
Скрипт делает всего-то ничего: измеряет время исполнения SCTL_CREATE, в секундах.

1. Сначала результат 0, регулярно.
2. Затем через главное меню изменим язык интерфейса с английского на русский.
3. Результат скрипта становится примерно 1.17 сек., также регулярно.
4. Перезапускаем Фар (auto save setup - отключен).
5. Результат скрипта остаётся примерно 1.17 сек., регулярно.
6. Перезапускаем Фар (auto save setup - отключен).
7. Результат скрипта становится 0, регулярно.

То-есть, для восстановления исходного состояния нужны 2 перезапуска Фара.
Для чистоты эксперимента предварительно удалял базу RESearch, это ни на что не повлияло.
С другими плагинами пока такого эффекта не наблюдал.

Windows XP SP3 x86, Far 3.0.3421, RESearch 7.67
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Странный эффект у SCTL_CREATE

Post by t-rex »

ну различие каким то образом происходит из за того что в случаях 1,7 плагин не загружен, а в 3,5 загружен (из за смены языка и невалидности кэша в таком случае).
т.е. когда этот плагин загружен он там что то с настройками мутит
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Странный эффект у SCTL_CREATE

Post by Shmuel »

Поправь, если ошибаюсь: разве при вызове SCTL_CREATE для базы RESearch другим плагином сам RESearch вызывается Фаром? Почему же тогда такое гигантское время (1.17 сек.)?
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Странный эффект у SCTL_CREATE

Post by t-rex »

не вызывается, но видимо он там что то делает в фоне или что то такое.
я не знаю что и почему, я тебе только объяснил что именно влияет на разницу во времени и почему два раза надо фар перезапустить.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Странный эффект у SCTL_CREATE

Post by Shmuel »

То, что ты объяснил, понятно. Непонятен, однако, механизм торможения, и не в Фаре ли его причина (что бы ни делал плагин RESearch).
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Странный эффект у SCTL_CREATE

Post by t-rex »

Там же асинхронность, и при открытии базы ожидается завершение предыдущей записи, а также во время открытия если кто то ещё пытается открыть в тоже время то один ждёт пока другой закончит "открытие".
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Странный эффект у SCTL_CREATE

Post by Shmuel »

t-rex wrote:Там же асинхронность, и при открытии базы ожидается завершение предыдущей записи
Если RESearch завершил запись, будучи вызван после смены языка, время скрипта должно быть 0. Если не завершил - бесконечность. Откуда берутся загадочные 1.17 сек., причём стабильно?
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Странный эффект у SCTL_CREATE

Post by t-rex »

Бесконечность и дед локи там быть не могут, запись происходит только при SCTL_FREE.
А откуда оно берётся фиг его знает, это уже дебагить надо а не тут писать. Может там плагин постоянно на PluginSynchro подписывается и что то в базу пишет.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Странный эффект у SCTL_CREATE

Post by Shmuel »

t-rex wrote:А откуда оно берётся фиг его знает, это уже дебагить надо а не тут писать. Может там плагин постоянно на PluginSynchro подписывается и что то в базу пишет.
Я проверил: плагин не экспортирует ProcessSynchroEventW.
Также проверил, что если в этом (тормозном) случае вызвать по полученному хэндлу Enum с subkey==0, то Фар устанавливает Count==0, то-есть "нет элементов".

Предполагаю, что RESearch просто не освобождает хэндл, а 1.17 сек. - это тайм-аут SQLite3.
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Странный эффект у SCTL_CREATE

Post by t-rex »

Shmuel wrote:Предполагаю, что RESearch просто не освобождает хэндл, а 1.17 сек. - это тайм-аут SQLite3.
Странно, ибо чего бы sqlite-у таймаутится то? Он вполне себе нормально поддерживает несколько подключений к одной базе.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Странный эффект у SCTL_CREATE

Post by Shmuel »

Ну вот я проверил на своём плагине вместо RESearch: сделал запись в базу, не освободил хэндл.
После чего получил те же 1.17 сек. время SCTL_CREATE.
Post Reply

Return to “Разработка плагинов”