OledbConnection Close 和/或 Dispose 非常慢,需要 20 秒才能执行

问题描述 投票:0回答:2

在使用 OleDbConnection 访问 Excel 文件的工作表名称时遇到问题。代码中的所有内容都执行良好并有效,直到 OleDbConnection 在 using 语句结束时关闭。这会导致程序停止 15-20 秒或更长时间!

我尝试摆脱 using 语句并单独使用 OleDbConnection.Close() 和 OleDbConnection.Dispose() 方法,这两个方法的执行时间也非常长。如果我根本不关闭连接,程序就可以完美运行。

//Closing connection is inredibly slow now for some reason
                using (OleDbConnection conn = new OleDbConnection(connectString))
                {
                    conn.Open();
                    DataTable dbSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    sheetNames.Clear();
                    for (int i = 0; i < dbSchema.Rows.Count; i++)
                    {
                        sheetNames.Add(dbSchema.Rows[i]["TABLE_NAME"].ToString());
                    }
                    comboBox1.Items.Clear();
                    comboBox1.Items.AddRange(sheetNames.ToArray());
                    comboBox1.SelectedIndex = 0;
                    //conn.Close();
                }
//Connection strings
//XLS
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}; Extended Properties='Excel 8.0;HDR=No;IMEX=1;';" />
//XLSX
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0;HDR=No;IMEX=1;';"

我注意到的一件非常奇怪的事情是,除了 .xls 文件(来自 1997-2003 年的 Excel)之外,每种类型的 excel 文件的连接都需要很长时间才能关闭。

除此之外,我在互联网上到处搜索,实际上找不到任何人找到了解决方案,只有未解决的论坛帖子。以下是我从有相同问题的人那里找到的一些链接:

OleDbConnection close 方法执行时间较长,

OleDbConnection 处理速度非常慢(2s)

http://forums.asp.net/t/2059359.aspx?OledbConnection+Close+take+too+long+to+execute

c# asp.net database excel oledbconnection
2个回答
2
投票

关闭与 Access 数据库的 OLE DB 连接时,我遇到了类似的性能问题。相关问题的建议解决了该问题:将以下内容添加到连接字符串中:

OLE DB Services=-1;

我无法使用 Excel 工作簿重现该问题,但这也可能适用于这些工作簿。


0
投票

两年后,古奇的回应帮助我摆脱了困境。谢谢。

我的应用程序使用 OleDb 连接器来访问数据库文件。

我确实需要修改稍后打开数据库文件的方式来计算校验和。

using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

FileShare.ReadWrite 似乎是关键,之前使用 System.IO.File.OpenRead。

© www.soinside.com 2019 - 2024. All rights reserved.