John
It is not easy to get high throughput, even when the USB bit rate is very high. It depends on many factors - how the data is being prepared, how the USB buffers are kept filled in order to avoid the controller missing slots. It also depends on the class - the PC may only give it a part of the bandwidth available.
You need to analyse the flow, use a USB analyser to check the missed slots (and then feed this back to the analysis to see why the code is not supplying the controller to keep it flowing).
The USB bus is one aspect but getting the firmware to keep up with the data rate is another, which is often underestimated. If you are using USB-MSD to get data from an SD card for example, the SD card will probably be the actual bottle-neck because they can be quite slow.
Regards
Mark