I implemented a simple C# application which inserts about 350000 records into the database. This used to work well and the process took approximately 20 minutes.
I created a progress bar which lets you know approximately the progress of the records insertion. When the progress bar reaches about 75% it stops progressing. I have to manually terminate the program as the process doesn’t seem to complete. If I use less data (like 10000), the progress bar finishes and the process is completed. However when I try to insert all the records, this won’t happen any more.
Note that if I wait longer to terminate the program manually, more records would have been inserted. For example, if I terminate the program after 15 minutes, 200000 records are inserted, whereas if I terminate the program after 20 minutes, 250000 records are inserted.
This program is using a single thread. In face I can’t do anything else until the process is complete. Does this have anything to do with threading or processes?
Any feedback will be greatly appreciated.
Thanks.
It is surprising that your progress bar works at all. If you don’t use a separate thread then your long running task will stop the message loop from running, causing your application to be unresponsive.
You should run this task using a BackgroundWorker. Put your long-running code inside a handler for the DoWork event. Use ReportProgess to update the progress bar. Don’t access form controls directly from inside the DoWork handler.
There are some examples of how to do it on MSDN.
Also, make sure that you don’t update the progress bar for every single change. If you have 100,000 records, only update the progress bar for every 100 or 1000 records, for example. Too many events can also cause the program to stop responding.