Performance of SQLite provider could improve a lot, I just want to point out couple of things hre, although I am not a C++ guy so I could be very wrong
1) P/invoke calls should be reduce as much as possible. All columns data for a particular row could be read at once on each Read() [sqlite3_step call of DataReader, calling through pinvoke for every column to retrieve value is very slow.
2) I heard that there are ways to improve marshalling ...
3) Convert.ChangeType should be avoid. Introduce more TypeInfinities like TypeInfinity.Int32 since sqlite3_column_int function was already available. So ' _typecodeAffinities' array at SQLiteConverter should be corrected and GetValue(SQLiteStatement stmt, int index, SQLiteType typ) of SQLite2 should cater all infinities.
I have tested same amount of data loading of identical schema tables between SQL Server 2008 and SQLite. Being the fact that SQLite was on my machine and I was just running Select * from table. SQLite was 3 times slower. I think SQLite could perform better because when I put filters in the query which reduces the result set to just hundreds of rows, SQLite was performing better. I believe the reason why SQLite is slower is due to massive P/Inoke calls (for each column).