|
> Independently of the number of bytes to be returned, the call of the
> procedure is very slow (time job running was 19 seconds). When I define the
> return field like the input field with 255 bytes the call is faster (runtime
> only 1 second).
>
> Why that? I would expect, that only characters needed and length information
> are copied to the calling procedure. Not the hole storage area.
When returning a 64k string by VALUE, here's what your procedure has to
do:
1) Address of input parameter is copied from caller to subproc.
2) 65537 bytes of memory allocated for #RtnStr variable.
3) up to 255 bytes of data are copied from $InpStr to #RtnStr
4) 65537 bytes of data are copied from #RtnStr to the caller's #str1
5) The memory allocated for #RtnStr is deallocated
The slowest point will be step 4, where the return value is copied, since
over 64k of data needs to be copied.
Instead, I would do it this way:
P TSTPRC2 B
D TSTPRC2 PI
D $InpStr 255 varying const
D #RtnStr 65535 varying options(*varsize)
D RtnStrSize 10I 0 value
c eval RtnStrSize = RtnStrSize - 2
c if %len($InpStr) > RtnStrSize
c eval #RtnStr = %subst($InpStr:1:RtnStrSize)
c else
c eval #RtnStr = $InpStr
c endif
c return
P E
When you call it, do it like this:
callp TSTPRC2(str2: str1: %size(str1))
Using this method allows you to use any size of data, just like your
solution did.
However, the only data that need to be copied back & forth is the ADDRESS
of the two strings (16 bytes each) plus the 4 bytes for the size. Total of
36 bytes.
That should perform MUCH better than returning a 65537 byte variable.
Hope that helps...
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.