I'm curious too: My example SendMail.prg would re-encode the file every time an email is sent: If 20 identical emails were sent, then the file would be re-encoded 20 times. And in my tests, a 128k PDF file took 1.95 seconds (65k/sec) to encode after loading using FileToStr, The transfer sending mail depends on your ISP connection.
A 479k PDF file took 68 seconds to encode (7k/sec). I'm not sure, offhand, why the non-linear results. (I re-tried the 128k file, and it took 1.7 seconds....)
A 329k PDF took 22.6 seconds (14k/sec).
It must be the output string building, which (appending a string to the end of another string) would get slower the longer the output string is. Perhaps outputting to a temp file then FileToStr the temp file would be quicker. Any other ideas?