Why is stdin.byLine.writeln so slow?

monarch_dodra via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 13 15:21:56 PDT 2014


On Friday, 13 June 2014 at 22:12:01 UTC, Ali Çehreli wrote:
> On 06/13/2014 03:02 PM, monarch_dodra wrote:
>
> > No, it just receives a range, so it does range formating. eg:
> > "[" ~ Element ~ ", " ~ Element ... "]".
>
> It still looks like it could send the formatting characters as 
> well as the elements separately to the output stream:
>
> "["
> Element
> ", "
> ...
> "]"
>
> I am assuming that the slowness in OP's example is due to 
> constructing a long string.
>
> Ali

We'd have to check, but don't think that formatted write actually 
ever allocates anywhere, so there should be no "constructing a 
long string". The real issue (I think), is that when you ask 
formatted write to write a string, it just pipes the entire char 
array at once to the underlying stream.

If the characters are escaped though (which is the case when you 
print an array of strings), then formatedWrite needs to check 
each character individually, and then also pass each character 
individually to the underlying stream. And *that* could 
definitely justify the order of magnitude slowdown observed.

What's more this *may* trigger a per-character decode-encode 
loop. I'd have to check. But that shouldn't be observable next to 
the stream overhead anyways.


More information about the Digitalmars-d-learn mailing list