Following code takes like 2500 milliseconds on an i7-*3.4 GHz windows-7 64-bit computer to read an excel sheet with 25000 lines and 5 columns. Each cell approximately include a string with 10 characters. Is it normal? How can I read it faster?
Stopwatch sw1 = Stopwatch.StartNew();
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; " +
"Extended Properties=Excel 12.0;", filename);
var adapter = new OleDbDataAdapter("SELECT * FROM [roots$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "roots");
sw1.Stop(); Console.WriteLine("Time taken for excel roots: {0} ms", sw1.Elapsed.TotalMilliseconds);
I wish to present my findings as an answer because the behavior is always consistent.
I have copied your code and put inside a button click event, just changed a bit to be sure to dispose the adapter and the connection for every test made.
So, this is basically is your code. This code executes in 500ms. BUT….
if I keep the file test.xls open in Excel 2010, the execute time jumps to 8000ms.
I have also tried this code variation, but the end results are the same
and, no, it’s not the Open() of the OleDbConnection, is always the adapter.Fill()