I have a .NET 4.0 console application that does a lot of reads from SQL Server 2008 using the OleDbDataAdapter object.
I tried to improve performance by spreading the processing logic across four threads using Visual Studio 2010’s Task Parallel Library. Sadly the multi-threaded version is three times slower than the original. Using VS2010’s performance tools, I found thousands of thread contentions caused by the method OleDbDataAdapter.Fill() which populates a DataSet.
This is puzzling as there are no static classes or variables involved that would result in the OleDbDataAdapter being shared by my threads. Also, four simultaneous connections just can’t cause a hold up at the database level, right? The default connection pool size should be much larger than this.
Does anyone have any theories?