以下基本代码大约需要35秒才能完成dt.load(reader)
。该数据库是MS Access .mdb数据库,具有约210个“列”,可能有37行。
我已经看过许多关于此的博客和帖子,其中“慢”,“还有其他方式”等。这仅是200行左右……也许是1秒的顶部,对吗?
string connectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=" + file;
_conn = new OdbcConnection(connectionString);
string sql = "select * from fields";
OdbcCommand command = new OdbcCommand(sql, _conn);
OdbcDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader); // 30+ seconds to complete
foreach (DataRow row in dt.Rows)
{
...
还尝试了以下操作...在Fill()
上同样延迟了35秒
OdbcDataAdapter adapter = new OdbcDataAdapter();
DataSet ds = new DataSet();
ds.Clear();
adapter.SelectCommand = command;
adapter.Fill(ds);
答案 0 :(得分:1)
当多个用户正在访问数据库时,访问速度要慢得多。确保您的应用未连接,并在访问目录中检查.ldb文件。如果在那里,则有人将其打开(或崩溃,留下锁)。 如果是这样,请尝试菜单中的压缩和修复选项。 (默认情况下,当最后一个人退出数据库时,它将运行此操作,但是如果有人崩溃,数据库将永远不会被压缩)。
答案 1 :(得分:1)
Access是一个前端数据库,这意味着表本质上是被动的-在某种意义上与csv文件没有什么不同。
Access的最大字段数不能超过255,因此在210时您将接近该字段-虽然这可能是个问题,但是您可以确定是否有一个较小的字段数可以进行测试-但我对此怀疑。记录集查询运行速度很快。只需眨眼即可在Access中为该表运行选择查询--但是您正在建立一个在Access外部的连接,它出现在屏幕上-那么此代码位于..那是在调用ODBC阅读器吗?如果针对其他数据集格式(而不是Access mdb),相同的连接代码会更快吗? …。
答案 2 :(得分:0)
找到了这个,它纠正了我的问题!现在的结果令人惊讶... 327毫秒,包括同一调用(目标连接)中EF.core方法调用的开销。