Considering that the second and third are in the "normal world" constrained to being the set of one instance of each possible characters, 256 for ASCII, your test is totally absurd.
It's also an inaccurate measure of performance of chrtran() because you've mixed the replicate() time into the benchmark.
>run this:
>
>CLEAR
>SET ESCAPE ON
>FOR n=12 TO 24
> lcStr = SPACE(2^n-32)
>? 'lenght',LEN(lcStr)
> ltStart = seconds()
> lcX = chrtran( replicate( '*', 2^n-32), lcStr , lcStr )
>?? seconds() - ltStart
>next
>
>with a 256K string you have to kill the process.