Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Потайной метод ОчиститьКлассыРепозитария (число прочтений - 8711 )
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Потайной метод ОчиститьКлассыРепозитария
30. Июля 2006 :: 17:12
Печать  
Изучая код компоненты нашел потайной метод MetaInfoClasses::ОчиститьКлассыРепозитария, который сбрасывает кэш откомпилированных модулей классов. Конечно, как обнаружилось позже, этот метод описан в хистори и в Readme.doc. Но только кто их читает? Читают ALS, в лучшем случае CHM.

И даже авторы ничего не смогли сказать про этот метод, когда я предлагал сделать сброс кэша модулей при отключении флага "Оптимизация". Думаю, что надо этот метод задокументировать.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #1 - 30. Июля 2006 :: 21:11
Печать  
Гмм... Я правильно понимаю, что выполнив этод метод при нажатой кнопке Оптимизация 1С заново откомпилирует класс?

Т.е. послал по сетке комманду перечитать класс - и работает уже с исправленным кодом?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #2 - 31. Июля 2006 :: 09:18
Печать  
sedmin писал(а) 30. Июля 2006 :: 17:12:
И даже авторы ничего не смогли сказать про этот метод, когда я предлагал сделать сброс кэша модулей при отключении флага "Оптимизация". Думаю, что надо этот метод задокументировать.

У меня есть большое подозрение, что данный метод был создан по мотивам именно твоих предложений.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #3 - 31. Июля 2006 :: 14:46
Печать  
Нет. Я проверил - метод добавлен давным давно, еще в версии 1.2.0.1.

Arta
Да, именно это и делает метод.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #4 - 31. Июля 2006 :: 17:26
Печать  
Цитата:
MetaInfoClasses::ОчиститьКлассыРепозитария

Зашибись название. Х. поймешь, что такой метод делать должен.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #5 - 31. Июля 2006 :: 19:28
Печать  
kms писал(а) 31. Июля 2006 :: 17:26:
Зашибись название. Х. поймешь, что такой метод делать должен.



Это точно Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #6 - 10. Августа 2006 :: 14:11
Печать  
Метод то есть, а вот работает он не так как хотелось бы...

Предположим человек сидит в обработке, в которой создан класс. В этот момент я в константе говорю сбросить кэш. По обработке ожидания перечитывается значение константы и выполняется ОчиститьКлассыРепозитария(). Если у клиент включена оптимизация, то 1С сворачивается в коврик Печаль

  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #7 - 10. Августа 2006 :: 19:23
Печать  
Вот как раз сейчас собирался написать тесты для этого метода.

А будут тесты - будет и надежда на то, что все будет работать. Подмигивание (Если, конечно, мне дадут доступ Улыбка )
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #8 - 10. Августа 2006 :: 19:56
Печать  
sedmin
Ты, конечно, пиши, пиши...

Только мне предложение, которое в свое время высказал DmitrO, представляется наиболее правильным.
Т.е. не метод сброса, а декларатор класса.

Типа
Код
Выбрать все
класс NOCACHE Общие.Форма.Привязка=Общие.Форма.Привязка.ert : РасширениеФормы
{
}

или

NOCACHE класс Общие.Форма.Привязка=Общие.Форма.Привязка.ert : РасширениеФормы
{
}
 



Кроме того, могут быть и другие деклараторы, надо это предусмотреть.
Может, ты в эту сторону посмотришь?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #9 - 10. Августа 2006 :: 19:59
Печать  
Что должно произойти если запустить ОчиститьКлассыРепозитария в методе какого-либо класса? Я например выношу глоб. обработку ожидания и ПриНачалеРаботыСистемы в классы. Из этой самой обработки ожидания и хотел сбрасывать кэш.
1. Все навернется
2. Кэш сбросится, кроме текущего, уже созданного класса.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #10 - 10. Августа 2006 :: 20:02
Печать  
kms писал(а) 10. Августа 2006 :: 19:56:
Т.е. не метод сброса, а декларатор класса.


Иными словами этот класс не будет кэшироваться вообще?

Я сам например преследую цель обновить класс без перезагрузки 1С у клиентов. Т.е. поправил - отправил сигнал о сбросе кэша - на стороне клиента класс обновился при следующем создании.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #11 - 10. Августа 2006 :: 20:37
Печать  
Arta писал(а) 10. Августа 2006 :: 20:02:
Иными словами этот класс не будет кэшироваться вообще?

Я сам например преследую цель обновить класс без перезагрузки 1С у клиентов. Т.е. поправил - отправил сигнал о сбросе кэша - на стороне клиента класс обновился при следующем создании.

Мне не нравится такая реализация.

Опять предлагаю декларатор
Код
Выбрать все
класс AUTOCACHE Общие.Форма.Привязка=Общие.Форма.Привязка.ert : РасширениеФормы
{
}
 


Смысл.
При первом создании класса происходит чтение файла и его хеширование приличной хеш-функцией; MD5 сойдет.

При повторном создании происходит чтение файла, хеширование. Но рекомпиляция происходит только для измененных файлов.
Думаю, потери будут минимальны.

Можно вообще ничего не хешировать, просто отслеживать изменение времени файла - смысл тот же, даже лучше, т.к. проще.

Arta
А че у тебя за технология работы такая, что приходится налету менять классы?
Непрерывное производство?

Вопрос совершенно серьезный и без подколов.
Я просто по-другому работаю - вся отладка идет локально, а фиксация изменений - максимум пару раз за день.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #12 - 10. Августа 2006 :: 20:49
Печать  
kms писал(а) 10. Августа 2006 :: 20:37:
Arta
А че у тебя за технология работы такая, что приходится налету менять классы?
Непрерывное производство?

Вопрос совершенно серьезный и без подколов.
Я просто по-другому работаю - вся отладка идет локально, а фиксация изменений - максимум пару раз за день.



Крупный сервисный центр по электронике. Куча обслуживаемых брендов. Очень много нюансов, критериев, которые изменяются каждый день, и они правятся на лету почти круглосуточно.

Кроме того много взаимодействия из 1С с разными устройствами, от мобильных телефонов до различного тестового оборудования.

P.S. Не судите строго, я не программист в фирме, а директор  Подмигивание
Программист занимается как раз ежедневной рутиной Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #13 - 10. Августа 2006 :: 20:53
Печать  
kms писал(а) 10. Августа 2006 :: 20:37:
При повторном создании происходит чтение файла, хеширование. Но рекомпиляция происходит только для измененных файлов.
Думаю, потери будут минимальны.

Можно вообще ничего не хешировать, просто отслеживать изменение времени файла - смысл тот же, даже лучше, т.к. проще.

Перечитвать файл - думаю потери будут значительны при массовом создании объектов.
А вот по времени файла... это менее надежный вариант чем с хешем, но зато в разы быстрее. На вид идея хорошая...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Потайной метод ОчиститьКлассыРепозитария
Ответ #14 - 10. Августа 2006 :: 21:08
Печать  
Arta писал(а) 10. Августа 2006 :: 20:49:
P.S. Не судите строго, я не программист в фирме, а директор  Подмигивание

Советский суд - самый гуманный суд в мире Язык
Шутка.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать