Perfect this was the information I was looking for.
PaulRB, I was using a string because I'm writing the data to an SD card. The example code I worked off of to make my sketch used a string. But I think using an array is a very good idea. As Mark suggested Seeing as I don't need the set to add a "," to each datum.
Riva, I might give you suggestion a try. However the more accurate my data the better.
I think I'll shell out the $12 for a Due, and get the mythical ~1 MSPS that Ard mentioned.
If you do switch to the DUE, try using a RTOS such as freeRTOS or uMT; I tend to like uMT for the DUE and freeRTOS for the multi core devices like the ESP32. I find the greater control and task switching to be worth the trade off of the overhead of the RTOS and with the clock of the DUE and a RTOS loaded performance is still better then the Uno or Mega.
Also, for the String, in the setup, reserve(), a String buffer and use the contact() to add data to the string buffer. Using a string buffer gets rid of the string being moved around in memory with each lengthening, which creates memory holes. A "" to the string buffer, clears the buffer for new contact()'s. You will also realize a small performance increase with a string buffer and contact() over sX= sX + "more stuff", which has to do a memory copy from a small space to a larger space. As the sX grows in size the memory copies take just a bit longer. When the string in the buffer reaches a size, length(), a write, and "" can be done.