"Not Enough Memory" Error in SignalExpress

Updated Feb 27, 2019

Reported In


  • SignalExpress

Issue Details

I am logging data or generating a waveform using NI SignalExpress. After running my project, I encounter the following Error: Not Enough Memory to Complete the Operation​.
How can I resolve this?


First, ensure that you are optimizing your SignalExpress project

Unfortunately, if the file size is too large there is not much that can be done to get around this issue. The way that SignalExpress is designed to run full tasks in a loop prevents the user from loading in portions of the waveform and streaming that data to the card for generation.
A couple things, however, that can be done are to decrease the amount of samples used to create the waveform in the Analog Waveform Editor as well allowing regeneration in the Timing tab of the DAQmx Generate step, if the overall waveform is not a compilation of different waveforms. The below image shows the different parameters that must be balanced to produce a smaller waveform when creating it in the Analog Waveform Editor.

Additional Information

When a new HWS file is created in the analog waveform editor, the file is compressed when saved, so it appears to be a smaller file size on disk than it actually will be when used in an application. For example, if you create a new waveform with 7 million samples, on disk, its file size is approximately 178KB. 

Now, when this HWS file is loaded into SignalExpress or the DAQAssistant, each sample is converted to double precision, which means that each sample takes 8 bytes of memory. Therefore, when a 7 million sample waveform is loaded into memory, it will then consume 56MB of RAM. Another caveat to the way that SignalExpress handles memory is that the communication between steps is done via data copies. So, when you are using a Load from HWS step and then a DAQmx Generate step, one copy of the data is created when the Load from HWS step is run and the HWS waveform is loaded into memory. When the DAQmx Generate step is executed, a copy of that waveform is created in memory to be used for generation. Also other things like selecting the "Preview" button to view the waveform as you generate, creates copies of that waveform. 

All of these things combine to use up all memory that is allocated for use by SignalExpress through Windows. The below images show the difference in memory usage, while trying to run this simple generation from HWS file once. 

Notice that the amount of memory used when running this step with the DAQmx Generate step included is drastically larger than if you just run the Load from HWS step. This memory discrepancy shows the use of data copies to perform the generation.