从 C# 读取 Access 2007 (accdb) 文件的性能非常慢

use*_*331 5 c# oledb performance ms-access ms-office

我正在使用 C# 在 Visual Studio 2008 上编写一个应用程序。应用程序从 access 文件读取数据,然后生成 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
                            }
                        }
                    }
                }
          }
    }
Run Code Online (Sandbox Code Playgroud)

今天我收到了一个 accdb 文件 (Access 2007),因此我将连接字符串更改为以下内容:

connStr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False", this.dbPath);
Run Code Online (Sandbox Code Playgroud)

但更改后,读取新文件每条记录大约需要 4-5 秒!所以,我的整个过程需要很多天才能完成!我尝试将 accdb 文件转换为旧的 mdb 文件,然后使用以前的连接字符串再次读取,但问题仍然存在。我认为是数据库本身的问题,但我不知道该怎么办,在互联网上我没有找到任何有关此类问题的信息。

有任何想法吗?建议?

小智 4

根据我的经验,5年前。

其中一个Access数据库的记录超过20000条,大小约为150MB。它开始变慢并且性能直线下降。因此转向 SQL。

您可以考虑使用 SQL 精简版或 sql lite

谢谢

  • 150MB 对于 Access/Jet/ACE 来说是小得离谱。如果这导致了性能问题,那么您的设计就很糟糕,无论是在您的数据模式还是在您的应用程序中。不过,在目前的情况下,对于 1GB 文件,我建议将其大小升级到服务器数据库,因为这只是接近 Access/Jet/ACE 文件的 2GB 硬限制的方法。 (5认同)