我正在使用以下代码(Variant DataReader):
当我连接到离线数据库(Microsoft Access)时,我的读取时间为(检索1.5k个项目):
- DataReader 420毫秒 - DataAdapter 5613毫秒
当从Oracle服务器中读取(检索30k个项目):
- DataReader 323845毫秒 - DataAdapter 204153毫秒(多次测试,时间变化不大)
即使更改命令的顺序(DataAdapter在DataReader之前),也没有太大变化(我认为可能有一些预缓存...)。
我认为DataTable.Load应该比DataAdapter.Fill快一些?
尽管我看到了结果,但我仍然相信它应该更快。我在哪里浪费时间?(没有未处理的异常...)
public DataTable dtFromDataReader(list<String> lstStrings)
{
OleDBConn_.Open();
using (OleDbCommand cmd = new OleDbCommand())
{
DataTable dt = new DataTable();
OleDbDataReader reader = null;
cmd.Connection = OleDBConn_;
cmd.CommandText = "SELECT * from TableX where SUID=?";
foreach (String aString in lstStrings)
{
cmd.Parameters.AddWithValue("?", aNode.SUID);
reader = cmd.ExecuteReader();
if (reader != null)
dt.Load(reader);
cmd.Parameters.Clear();
}
return dt;
}
}
并将其与(变体DataAdapter)进行比较:
public DataTable dtFromDataAdapter(list<String> lstStrings)
{
dt = new DataTable();
foreach (string aString in lstStrings)
{
sOledb_statement = String.Concat("SELECT * FROM TableX where SUID='", aString, "'");
OleDbDataAdapter oleDbAdapter;
using (oleDbAdapter = new OleDbDataAdapter(sOledb_statement, OleDBConn_))
{
GetOleDbRows = oleDbAdapter.Fill(dt);
}
}
}
当我连接到离线数据库(Microsoft Access)时,我的读取时间为(检索1.5k个项目):
- DataReader 420毫秒 - DataAdapter 5613毫秒
当从Oracle服务器中读取(检索30k个项目):
- DataReader 323845毫秒 - DataAdapter 204153毫秒(多次测试,时间变化不大)
即使更改命令的顺序(DataAdapter在DataReader之前),也没有太大变化(我认为可能有一些预缓存...)。
我认为DataTable.Load应该比DataAdapter.Fill快一些?
尽管我看到了结果,但我仍然相信它应该更快。我在哪里浪费时间?(没有未处理的异常...)