I believe your problem is due to the fact that you must use interrupts as the data transfer mechanism with DAQCards, and the Traditional NI-DAQ driver is single threaded. Depending on the DAQCard, the size of your FIFO can range from 2 KS (DAQCard 6036) to 16 KS (DAQCard 6062). Since the default transfer condition is FIFO Half Full, you will get data transferred into your buffer in chunks of 1,000 - 8,000 samples at a time. Depending on the speed of your AI acquisition and the frequency of the signal being measured with the counter, this can lead to errors due to the blocking nature of the driver. For instance, if your acquiring data at 10 KS/s, data will arrive in your buffer every 0.1 to 0.8 seconds depending on the size of your FIFO. This means any time you
try to read data, you could be blocking up to 0.1 to 0.8 seconds. If the frequency of the signal being measured by the counter is greater than 10 Hz, you will likely get errors. When using a transfer condition of interrupt at every sample, a read call when trying to read N samples will block for as long as it takes to acquire N samples instead of FIFO/2 samples. This could account for the increased throughput you are seeing on the counter when switching to interrupt at every sample.
One thing you can try is to poll the driver for the number of points available to read, and only perform the read call once the number of points you want to read are available and can be read without blocking. Alternatively, you can try switching to the DAQmx driver which is multi-threaded. DAQCard support for the DAQmx API will be available in NI-DAQ 7.1 and should be available soon. In the meantime, you can use a beta driver for DAQCards if you want to try DAQmx sooner. See knowledge base 2XM6TE
B9 for details on how to download the beta driver for DAQCards.