Going back to the performance issue, according to my experience you will get a very good performance boost if you convert the convert to String invoke step to a transformer step. My two cents explanation for performance improvement is as follows.
If you invoke a service, webMethods will try to create a copy of input pipeline , do the processing and then merge the results into already created copy of output pipeline. This is very important to do the way webMethods is doing, but for a task like covertToString, if you have declared the service signature properly not relying on the implicit variables, then you should be able to convert the invoke service to Transformer, by doing this webMethods only deals with what has been mapped as the input and what has been mapped as the output, and hence a lot of memory declaration is avoided. When you do these test on 1 or 100 records you won’t find a huge performance difference. But when you test this on a large number of records then you will for sure will find it to be better (or atleast I found it).