I agree with your method for isolating load time. Now let me ask an annoying question. What's the nature of the overall app that makes you sensitive to something in the order of 100 msec? Are you *sure* it matters *really*? I know that other aspects of task config often require something in the 10's of msec, so even 150 msec isn't something I immediately think of as "very high".
If so, here's my educated guess and a possible workaround.
Guess: it has mostly to do with allocating the buffer memory (and possibly initializing values there?).
Workaround: Make an explicit call to DAQmx Configure Output Buffer before sending your array to DAQmx Write. I'd expect the Buffer config to take most of the time and the Write to take quite a bit less than you're seeing now. This approach could help if you're able to know the needed buffer size during a time-insensitive part of your app (such as initialization & config), but not yet able to know the signal content you need to write into it. Then you only deal with the hopefully-faster write-only part during the time-sensitive period.
Alternate workaround: One can also run a finite task that generates more samples than the buffer size. But you have to write incremental data to the task repeatedly to keep it going. So another way to speed up the buffer allocation/loading time is to live with a smaller buffer and a more complex method for feeding data to the task.
-Kevin P
ALERT! LabVIEW's subscription-only policy came to an end (finally!). Unfortunately, pricing favors the captured and committed over new adopters -- so tread carefully.