【发布时间】:2011-11-28 04:01:57
【问题描述】:
我正在使用 C# 在 Visual Studio 2008 上编写应用程序。应用程序从访问文件中读取数据,然后生成一个 txt 文件。我正在使用具有 1.000.000 条记录和几乎 1GB 大小的 mdb 文件进行一些测试。 代码是这样的,整个过程需要 8 到 10 分钟才能完成。
var connStr = string.Format("Provider =Microsoft.Jet.OLEDB.4.0; Data Source={0};Persist Security Info=False", this.dbPath);
using (var conn = new OleDbConnection(connStr))
{
using (var command = conn.CreateCommand())
{
command.CommandText = "SELECT * from Registros r, FOIDS f where r.TICKET = f.TICKET";
command.CommandType = System.Data.CommandType.Text;
conn.Open();
int i = 0;
string ticket = string.Empty;
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
i++;
if (!reader.IsDBNull(reader.GetOrdinal("r.TICKET")))
{
ticket=reader.GetString(reader.GetOrdinal("r.TICKET"));
// Some process
}
}
}
}
}
}
今天我收到了一个 accdb 文件(Access 2007),所以我把我的连接字符串改成了这个:
connStr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False", this.dbPath);
但是在更改之后,每条记录读取新文件大约需要 4-5 秒!!!所以,我的整个过程需要很多天才能完成! 我尝试将 accdb 文件转换为旧的 mdb 文件,然后使用以前的连接字符串再次读取,但问题仍然存在。我认为是数据库本身的问题,但我不知道该怎么办,在互联网上我没有找到任何有关此类问题的信息。
有什么想法吗?有什么建议吗?
【问题讨论】:
-
是否可能不是读取 MDB 花费了很多时间,而是“//某个进程”部分?你可以做异步的东西吗?
-
我做了一些调试,延迟在 reader.Read() 指令上。此外,我添加了一些具有相同结果的日志,并且我已经用相同的结果评论了该过程。感谢您的快速回复!
-
你试过压缩数据库吗?
-
是否有可能将数据库改为 SQL?
-
将 TICKET 列编入索引是必不可少的。
标签: c# performance ms-access ms-office oledb