Как же меня достал этот глюк в LogOut...
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Губин Игорь
- Шубуршун
- Сообщения: 2578
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Как же меня достал этот глюк в LogOut...
При работе с LogOut наблюдается плавающе-постоянный глюк:
Внутри LogOut - Commit ключи в создаваемом файле создаются некорректно. Т.е. запись может быть добавлена (Add), а вот в ключах она не отразилась (Get даёт ошибку)...
В очередной раз наткнулся в старых кодах... Причём это может не проявляться годами, а в какой-то момент на каких-то определённых записях всё ломается.
Внутри LogOut - Commit ключи в создаваемом файле создаются некорректно. Т.е. запись может быть добавлена (Add), а вот в ключах она не отразилась (Get даёт ошибку)...
В очередной раз наткнулся в старых кодах... Причём это может не проявляться годами, а в какой-то момент на каких-то определённых записях всё ломается.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- Шубуршун
- Сообщения: 2578
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Как же меня достал этот глюк в LogOut...
с10, с11
Это я только кажусь дураком! На самом деле я полный идиот!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8025
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 95 раз
Как же меня достал этот глюк в LogOut...
Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Скорее всего получится фигвам ...
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2578
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Как же меня достал этот глюк в LogOut...
Файл открывается 12h, т.е. никаких посторонних влияний. Работает с файлом единственный процессИгорь Столяров писал(а): 17 Июнь 2025, 17:52 Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Драйвер TopSpeed
В мануале никаких запретов
Это я только кажусь дураком! На самом деле я полный идиот!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
Как же меня достал этот глюк в LogOut...
Logout буферизует запись в оперативной памяти. В приведенном случае до commit get увидит новую запись только там, где выполняется операция. У всех остальных новые записи не видны, разумеется. Я тоже часто использую logout для ускорения работы. Только режу большие транзакции на порции по 50-100 тыс записей. Все нормально работает. Когда-то давно сталкивался, что если не резать транзакции, то начинало происходить торможение, видимо, своп или что-то подобное. Потом были проблемы с высвобождением памяти. Кто-то рекомендовал запускать очень большие транзакции отдельным exe, чтобы по завершении память возвращалась операционной системе. Это очень давно было. Все сказанное для topspeed, разумеется. В ряде случаев (если, например, мы конвертируем таблицы, то есть полностью создаем новый файл) ускорение дает append вместо add, с последующим build. Для btrieve быстрее было сразу add.Игорь Столяров писал(а): 17 Июнь 2025, 17:52Вопрос в том, насколько вообще правомерна такая операция ...
Предположим, я внутри внутри LogOut - Commit добавляю запись с ID = 123
В это время с другой рабочей станции кто-то делает GET(ID = 123) записи.
Скорее всего получится фигвам ...хотя может зависеть от конкретного драйвера БД.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8025
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 95 раз
Как же меня достал этот глюк в LogOut...
Полностью согласен. Самое интересное, что на больших списках такая схема даёт хороший выигрышь и для драйвера In-Memory.finsoftrz писал(а): 17 Июнь 2025, 18:43 Все сказанное для topspeed, то есть ускорение дает append вместо add, с последующим build.
Make Clarion Great Again ! 
- Губин Игорь
- Шубуршун
- Сообщения: 2578
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Как же меня достал этот глюк в LogOut...
Тут о другом речь.finsoftrz писал(а): 17 Июнь 2025, 18:43 Только режу большие транзакции на порции по 50-100 тыс записей. Все нормально работает. Когда-то давно сталкивался, что если не резать транзакции, то начинало происходить торможение, видимо, своп или что-то подобное
Файл не очень большой, но к нему шло постоянное обращение в процессе его же создания. Когда лимитировал жёсткий диск LogOut очень сильно ускорял процесс.
Дело в том, что ты добавил запись через Add с некоторым уникальным значением поля (единственное в ключе), потом проверил, есть ли запись с таким значением поля, а get сказал - нету, но если добавить ещё одну запись с таким значением, то вылетает по Duplicate.
Код: Выделить всё
AFile File
AKey Key(AField),Primary
Recodd
AField Long
End
End
LogOut (.1,AFile)
AField = 1
Add(AFile)
.....
AField = 1
Get(AFile,AKey)
IF ErrorCode() Then
AFiled = 1
Add(AFile)
IF ErrorCode() <> 0 Then Stop('Что за фигня').
End
Commit
Это я только кажусь дураком! На самом деле я полный идиот!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5233
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 63 раза
Как же меня достал этот глюк в LogOut...
Похоже на баг. Во времена с6 такой вопрос обсуждался, и было сказано, что станция, которая добавляет записи в logout, сама их видит. То есть она делает get по буферу. Я обычно такое не использую, но, если правильно помню, то проверял, работало.
C6/C12, ШВС, tps/btrieve.
- Губин Игорь
- Шубуршун
- Сообщения: 2578
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз