Как я могу вызвать программу 100 раз в CL?
Я хочу вызывать программу в CL 100 раз, чтобы измерить время вызовов при разных настройках программы.
Может как то так?
DOFOR VAR(&INT) FROM(0) TO(99)
CALL PGM(TProg) PARM(&Parm)
ENDDO
2 ответа
Когда я делаю такое тестирование, я передаю количество итераций в качестве параметра.
У вас должно быть достаточно итераций, чтобы вызов с самыми быстрыми настройками занимал как минимум полминуты, чтобы отменить дополнительную работу, например получение временных меток. Наличие количества итераций в качестве параметра облегчает это.
Чтобы получить метку времени в CL, вы можете использовать RTVSYSVAL QDATETIME.
dcl &before type(*char) len(20)
dcl &after type(*char) len(20)
rtvsysval QDATETIME rtnvar(&before)
--- do the loop
rtvsysval QDATETIME rtnvar(&after)
sndpgmmsg &before
sndpgmmsg &after
Метки времени не очень читабельны (20180203143253529956, что означает 2018-02-03-14.32.53.529956). Вы можете захотеть сделать некоторые подстроки, чтобы сделать их более читабельными, или даже сделать некоторые вычисления, чтобы получить количество секунд между двумя временными метками.
Обновление, чтобы ответить на вопрос о том, как подстрока:
Я бы просто написал программу RPG, чтобы получить разницу между двумя временными метками.
**free
dcl-pi *n;
t1 char(20) const;
t2 char(20) const;
diffSeconds packed(7:2);
end-pi;
dcl-s ts1 timestamp;
dcl-s ts2 timestamp;
ts1 = %timestamp(t1 : *iso0);
ts2 = %timestamp(t2 : *iso0);
diffSeconds = %diff (ts1 : ts2 : *seconds : 2);
return;
Если вы не хотите использовать RPG или не можете, то вот как вы можете использовать подстроку и конкатенацию в CL для получения более читаемой метки времени.
dcl &prtBefore type(*char) len(26)
chgvar &prtBefore (%sst(&before 1 4) *tcat '-' *tcat +
%sst(&before 5 2) *tcat '-' *tcat +
%sst(&before 7 2) *tcat '-' *tcat +
%sst(&before 9 2) *tcat '.' *tcat +
%sst(&before 11 2) *tcat '.' *tcat +
%sst(&before 13 2) *tcat '.' *tcat +
%sst(&before 15 6))
sndpgmmsg &prtBefore
Конечно, это будет работать. Как вы собираетесь измерять производительность?