Are you reading the number of bytes you expect, or are you asking for more than that? If you ask for more, VISA will read what's there, then wait for the duration of the timeout to try to finish fulfilling your request. Sounds simple, but I've seen it happen when people don't realize how VISA is trying to work. But NI-VISA doing serial I/O isn't slow in and of itself. It doesn't add *that* much overhead.
If you know how many bytes you're going to get, request that number. If it's arbitrary but terminated with a given byte, enable the termchar support and use that byte value as the thing to look for. If you're getting an arbitrary number of binary bytes without a known terminating byte, then you may just need to lower your I/O timeo
ut and incorporate some of that logic yourself.
I hope this helps. If not, try posting a simple VI and/or the resulting NI Spy log.
Dan Mondrik
National Instruments