AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2009, 18:32   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Владимир Максимов, этим действием я не получу себе еще больше проблем?
Как указал glibs кеширование влияет на производительность. Но здесь нет однозначного ответа.

По умолчанию, у InventTable режим кеширования Found. Т.е. кешируются только те записи, к которым было обращение (поиск). Следовательно, этот режим кеширования имеет смысл оставить, если каждый пользователь работает в основном с небольшим набором номенклатуры. Или сам справочник номенклатуры небольшой.

Если же большинство пользователей работает со всей картотекой номенклатуры, то нет никакого смысла в кешировании.

У нас кеширование InventTable отключено. Справочник порядка 50 тысяч позиций. Проблем нет. Хотя, удаление записей запрещено

Цитата:
Сообщение от Eldar9x
И вообще, я не понимаю, для чего это проверка там вставлена? В inventTable есть уникальный индекс по ItemId, зачем еще этот код?
Вопрос момента проверки на уникальность.

Если оставить только индекс, то, во-первых, нет возможности "рулить" текстом сообщения об ошибке, а, во-вторых, будет выполнена куча лишних проверок до попытки сброса изменений в таблицу. Думаю, добавятся еще проблемы со связанными таблицами, но здесь не уверен.

Собственно, можно попробовать вообще убрать эту проверку и посмотреть к чему это приведет в случае попытки создания дубля.
За это сообщение автора поблагодарили: Eldar9x (2).
Старый 10.08.2009, 20:00   #2  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Владимир Максимов
...
кеширование влияет на производительность. Но здесь нет однозначного ответа
...
Если же большинство пользователей работает со всей картотекой номенклатуры, то нет никакого смысла в кешировании.
...
Вы заблуждаетесь. Для "Found" кешировнаие будет работать всякий раз, когда в коде вызывается

InventTable::find(...)

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

Если код работает на сервере приложений, то в таком случае будет лишнее обращение на сервер БД. Номенклатура там скорее всего будет тоже в кеше, поэтому потери производительности вы можете не ощутить визуально. Впрочем, если запускается долгоиграющая периодическая процедура (типа закрытия склада), в которой может очень-очень много раз вызываться InventTable::find(...) подразумевая, что кеширование включено, производительность может просесть заметно. Не говоря уже о лишнем трафике (Аксапта имеет привычку выбирать все поля в записи).

Если же код будет выполняться на клиенте (display методы, если по-хорошему), то потеря производительности при отключении кеширования будет заметна даже невооруженным глазом.

Когда я был помоложе, то тоже увлекался отключением кеширования. Но все-таки пришел к тому, что не стоит.

Вот вам джоб.

X++:
static void glibs(Args _args)
{
    InventTable             inventTable;
    Counter                 i;
    TimeOfDay               startTime,
                            endTime;
    ;

    startTime = timenow();
    for (i = 1; i <= 10000; i++)
    {
        inventTable = InventTable::find("Test");
    }
    endTime = timenow();

    info (strfmt("%1", endTime - startTime));

}
Попробуйте позапускать его на тестовой базе с реальным объемом данных при включенном и отключенном кешировании. Заодно еще загрузку сети посмотрите ради любопытства. Код номенклатуры только подставьте реальный.

У меня разница приблизительно на порядок получилась.
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: mazzy (2).
Старый 11.08.2009, 14:20   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
glibs

Я же говорю, нет однозначного ответа. Зависит от конкретной ситуации и надо смотреть "по месту" что выгоднее: возможная потеря производительности или актуальность данных.

Для нас критичным оказалась именно актуальность данных. Почему? Это уже отдельный вопрос.

По сути, единственное место, где реально ощутима потеря производительности - это display-методы.

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

Можно ведь сделать и "закат солнца вручную". В смысле, скидывать найденные записи во временную таблицу внутри цикла. Своеобразный локальный кеш получится.

Насчет закрытия склада - не понял. Где там многократное обращение к одной и той же записи InventTable? Там же единственный цикл именно по InventTable, а потом выбранная запись передается как параметр. Нет повторного InventTable::find()
Теги
кэширование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А построение перекрестных ссылок опять сожрет всю память и завесит систему нафих Alex_K DAX: Администрирование 15 04.09.2009 22:00
опять про setFocus() на Grid ... =)) NetBus DAX: Программирование 1 15.11.2005 13:52
Опять про кэш (*.aoc) DenisS DAX: Программирование 2 23.01.2004 13:27
Ax 3.0 Некорректное завершение - ошибка. Не лечится. Локальный кэш? dirigente DAX: Администрирование 4 20.11.2003 13:11
кэш клиента andreynikolai DAX: Программирование 1 15.09.2003 18:37
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:03.