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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2006, 13:48   #1  
6apcyk is offline
6apcyk
Участник
 
57 / 11 (1) +
Регистрация: 17.08.2005
Когда нужно ставить свойство server на static методах
Здравствуйте Уважаемые Коллеги!

На сколько сложней системе обращатся к серверному статическому методу таблицы, чем просто к статическому?

Т.е. почему методу статическому exist не ставить всегда server???
Мы же так должны экономить на передачах текстового запроса по сети?!
(иммеется ввиду канал от клиента до AOS)
Старый 11.12.2006, 14:07   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 6apcyk Посмотреть сообщение
Мы же так должны экономить на передачах текстового запроса по сети?!
Не текстового запроса.
Читайте Best Practice и документацию.

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

Т.е. лучше, если передаваемый между клиентом и сервером пакет данных будет побольше, нежели много маленьких пакетиков.
__________________
полезное на axForum, github, vk, coub.
Старый 11.12.2006, 14:57   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Кстати, не в тему вопрос но все же.

Есть ли какое нибудь отличие если в статическом методе написано
X++:
Static void blablabla()
{
}
или

X++:
client server Static void blablabla2()
{
}
Старый 11.12.2006, 15:04   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Есть ли какое нибудь отличие
Да.

Первый будет выполняться на сервере (если он есть)
Второй будет выполняться там, откуда его вызвали.

Читайте доку по ключевому слову Called from.
__________________
полезное на axForum, github, vk, coub.
Старый 11.12.2006, 15:14   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Cool
Цитата:
Сообщение от mazzy Посмотреть сообщение
Да.

Первый будет выполняться на сервере (если он есть)
Второй будет выполняться там, откуда его вызвали.

Читайте доку по ключевому слову Called from.
Да читал я доку. Только не нашел там ответа. Может пропустил что...
Мне всегда казалось, что по умолчанию код static метода выполняется там же где и вызвавший его код (если конечно явно не указано server или client)

А из ваших слов получается что static метод выполняется на сервере если не указано Client.
Или я вообще все перепутал...
Старый 11.12.2006, 15:14   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не совсем верно - первый будет зависить от свойства RunOn класса
__________________
Axapta v.3.0 sp5 kr2
Старый 11.12.2006, 15:21   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
Не совсем верно - первый будет зависить от свойства RunOn класса
Даже если метод статический?
Просто день открытий...
__________________
полезное на axForum, github, vk, coub.
Старый 11.12.2006, 15:33   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В общем проверил на примере -
Получается что если ничего не указано, то исполнятеся там как указно в свойствах класса RunOn.

А если в методе написано client server Static
то тогда выполняется там же где выполняется вызвавший код.

Теперь понятно почему кое где в коде встречалось
client server Static
Старый 11.12.2006, 15:45   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Даже если метод статический?
Мы же о статических и вели беседу
__________________
Axapta v.3.0 sp5 kr2
Старый 11.12.2006, 16:04   #10  
6apcyk is offline
6apcyk
Участник
 
57 / 11 (1) +
Регистрация: 17.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Не текстового запроса.
Читайте Best Practice и документацию.

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

Т.е. лучше, если передаваемый между клиентом и сервером пакет данных будет побольше, нежели много маленьких пакетиков.
Я собственно и хотел понять границу, когда надо переходить на серверный метод. Я еще раз упомяну: например на таблицах есть методы static exist(...), которые исполняются на клиенте, т.е передается запрос от клиента до сервера AOS, а потом судя по всему к базе. Поставив свойство server отпадает необходимость передавать запрос до сервера. Или я чего-то не понимаю ???
Старый 11.12.2006, 16:26   #11  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от 6apcyk Посмотреть сообщение
Я собственно и хотел понять границу, когда надо переходить на серверный метод. Я еще раз упомяну: например на таблицах есть методы static exist(...), которые исполняются на клиенте, т.е передается запрос от клиента до сервера AOS, а потом судя по всему к базе. Поставив свойство server отпадает необходимость передавать запрос до сервера. Или я чего-то не понимаю ???
Интересный вопрос.

Мне кажется что если проверка идет по первичному ключу и на таблице включено кешировнаие то ключевое слово server не нужно.

А так действитьельно кажется что должно бы быть оптимальнее с Server
Непонятно только почему в стандартном коде написано без него. Наверно неспроста.
Старый 11.12.2006, 17:39   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Послушайте а почему я не могу одобрить сообщение AndyD ?

Новые правила одобрения ? Подряд нельзя одобрять ?
Mazzy, если это не глюк то это неправильно

Мне кажется нужно иметь возможность одобрять подряд одного и того же участника.

Если это сделано как защита от накруток, то мне кажется все равно не спасет от недобросовестных участников.
Старый 11.12.2006, 17:52   #13  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Logger Посмотреть сообщение
Новые правила одобрения ? Подряд нельзя одобрять ?
Mazzy, если это не глюк то это неправильно

Мне кажется нужно иметь возможность одобрять подряд одного и того же участника.

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

Т.е. придется еще кого-нить одного одобрить, прежде чем вернуться к AndyD.
Старый 11.12.2006, 18:29   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от oip Посмотреть сообщение
Надо ли включать персональный рейтинг участинка?

Т.е. придется еще кого-нить одного одобрить, прежде чем вернуться к AndyD.
Об этом я догадался.
И написал что не согласен.
Думаю что неправильно так делать.
Ну да ладно.
Для AndyD и Mazzy репутацию вообще надо отключить. И так все ясно без рейтингов
Старый 11.12.2006, 18:36   #15  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Logger Посмотреть сообщение
Об этом я догадался.
И написал что не согласен.
Думаю что неправильно так делать.
Ну да ладно.
Для AndyD и Mazzy репутацию вообще надо отключить. И так все ясно без рейтингов
http://www.stopbugs.ru/view.php?id=60

Это уже в планах на изменение.
Пока продвижений правда нету
Старый 11.12.2006, 19:13   #16  
6apcyk is offline
6apcyk
Участник
 
57 / 11 (1) +
Регистрация: 17.08.2005
Может тему поменяете, а то как-то на флуд похоже!!

Может у кого-нить есть идеи как это практически оценить???
Старый 13.12.2006, 12:32   #17  
6apcyk is offline
6apcyk
Участник
 
57 / 11 (1) +
Регистрация: 17.08.2005
Тестирование метода InventTable::exist(...)
Решил протестировать всетаки.
Вот какая запускалась метода, такой большой перебор по номенклатуре для того, чтобы не использовать кэш.

X++:
static void Test_InventTableExist(Args _args)
{
    int         runTimes;
    int         counterItemId,
                time,
                itemIdLength    = 6;
    ItemId      curItemId;
    ;

    for(runTimes = 0; runTimes < 20; runTimes++)
    {
        time    = WinAPI::getTickCount();
        for(counterItemId = 1; counterItemId < 99999; counterItemId++)
        {
            curItemId   = int2Str(counterItemId);
            curItemId   = strrep("0", itemIdLength - strLen(curItemId)) + curItemId;
            InventTable::exist(curItemId);
        }
        info(strFmt("%1", WinAPI::getTickCount() - time));
    }
}
Вот результаты. Их следует читать снизу вверх так как выбрасовались в инфолог.
server static <-->static
144047 <-->152800
145289 <-->150006
146871 <-->150556
143727 <-->149615
149415 <-->150036
152629 <-->203893
158198 <-->255257
147482 <-->254897
143737 <-->232815
149244 <-->229189
174641 <-->226956
164527 <-->222520
175032 <-->217683
176173 <-->230852
171246 <-->237452
158649 <-->251481
182011 <-->247827
181631 <-->204254
177556 <-->224062
177876 <-->237311
Результаты не ахти, но покрайнеймере не говорят в пользу не использовать свойство server.
Старый 13.12.2006, 13:02   #18  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Предложение не использовать свойство сервер в запросах к данным не имеет перспективы. По логике вещей, это имеет смысл делать в 3.0 только в случае 2-tier или Fat client. В противном случае запрос к БД все равно пойдет через сервер и вы заменяете явный вызов неявным. А в версии 4.0 есть только thin client.
Старый 13.12.2006, 13:02   #19  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Чтобы кеш совсем не мешал можно его временно на таблице отключить или в методе Exist поставить объявить локальную переменную InventTable и поставить
InventTable.disableCache(true);
Старый 13.12.2006, 13:08   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от EVGL Посмотреть сообщение
Предложение не использовать свойство сервер в запросах к данным не имеет перспективы. По логике вещей, это имеет смысл делать в 3.0 только в случае 2-tier или Fat client. В противном случае запрос к БД все равно пойдет через сервер и вы заменяете явный вызов неявным. А в версии 4.0 есть только thin client.
Нууу...
Вообще то в 2-tier (подозреваю что и в Fat client тоже) модификаторы client и Server не имеют смысла - они ни на что не влияют. Все и так выполняется на клиенте, т.к. сервера приложений, на котором мог бы выполняться код - нет. Так что все что мы тут говорили имеет смысл только для thin client.
(Про 4.0 не говорю - не знаю)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: SQL Server 2005 sp3 & SQL Server 2008 with Dynamics AX Blog bot DAX Blogs 0 12.02.2009 06:08
aEremenko: Поддержка Microsoft SQL Server 2008 Blog bot DAX Blogs 0 04.10.2007 23:21
axaptabuilder: How to setup Axapta batch server running as user defined windows service Blog bot DAX Blogs 0 12.04.2007 16:10
aEremenko: Нужно ли использовать секционирование в Microsoft SQL Server 2005 для DAX 3.0 Blog bot DAX Blogs 5 27.03.2007 09:37

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

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

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