Показать сообщение отдельно
Старый 28.10.2009, 17:04   #8  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
решение проблемы запусков 2 runbuf в одном процессе
Идею реализовал и оттестировал. вкратце:
сделал стат методы класса test, из джобиков вызывал testRunBufCS изменяя модификатор client/server метода RunBufT (метод вызывает тестовый runBuf).
testRunBufCS1 - серверная реализация тестового механизма для тестирования 2х одновременных серверных исполнений.

Результаты одновременного запуска testRunBufCS и testRunBufCS1 в разных клиентах:
1) при запуске тестов с модификаторами server как и ожидалось произошел сбой.
2) в RunBufT ставим модификатор client - при запуске тестов все отработало без ошибок (1 runBuf исполнился в серверном процессе, 2-й в клиентском)

Результаты задержек при исполнении runBuf на клиенте:
1) RunBufT на сервере - 18 сек
2) RunBufT на клиенте - 37 сек

Т.о. задержка при передаче исполнения клиенту возрастает в 2 раза при данной реализации вызова runBuf.

X++:
static server void testRunBufCS()
{
    inventTable it;
    str         s;
    int         cnt;
;
    timeStamp();

    while select it
    {
        s=test::RunBufT(it.ItemId, it);
        cnt++;
    }

    info(int2str(cnt));
    timeStamp();
}
X++:
static client str RunBufT(str _s, common _c)
{
    str     expr;
;
expr=@'str convert2(str _s, common _c)
{
    inventTable         it = _c;
    inventItemGroup     iig = inventItemGroup::find(it.ItemGroupId);
;
    return _s+iig.Name;
}';
   return runbuf(expr,_s,_c);
}
X++:
static server void testRunBufCS1()
{
    inventTable it;
    str         s;
    int         cnt;
    str         expr;
;
expr=@'str convert2(str _s, common _c)
{
    inventTable         it = _c;
    inventItemGroup     iig = inventItemGroup::find(it.ItemGroupId);
;
    return _s+iig.Name;
}';
    timeStamp();

    while select it
    {
        s=runbuf(expr,it.ItemId, it);
        cnt++;
    }

    info(int2str(cnt));
    timeStamp();
}

PS: к слову, при реализации RunBufT как static server str RunBufT(str _s, common _c, common _c1, common _c2 ), время выполнеия у меня следующее: 47 / 79 (сервер/клиент соответственно)
__________________
--- SHiSHok