I’m writing an application in vb.net 2005. The app reads a spreadsheet into a DataSet with ADO.NET and uses a column of that table to populate a ListBox. When a ListBox Item is selected, the user will be presented with detailed information on the selected record.
One part of this information isn’t in the DataSet. I have to compare a column from the spreadsheet with several external data sources to determine the nature of the record in question. Here’s where I have my problem.
This comparison has to search through 9.5m rows in a SQL table at one stage. I’ve checked and there’s no way to “shrink” the query down as I’m already only searching absolutely essential data.
What happens is that the application never visibly does anything. The CPU usage shoots up to 100% regardless of what it was at beforehand and the system’s performance becomes almost unbearably slow.
Can anyone suggest a way I can improve this situation while this massive query is running?
EDIT: I was originally going to write the contents of the 9.5m rows in the database table to a text file which I’d then read from, but after 6.5m rows, I got an OutOfMemoryException.
I suspect your CPU might be used in populating the
DataSet, though you would have to profile your application to confirm that. Try using aDataReaderinstead and either storing the results in some more compact format in memory or, if you’re running out of memory, then writing them to a file as you go. With theDataReaderapproach you never need to store the entire result set in memory at the same time.