OleDbConnection 处理很慢(2s)

Posted

技术标签:

【中文标题】OleDbConnection 处理很慢(2s)【英文标题】:OleDbConnection Dispose very slow (2s) 【发布时间】:2016-09-09 10:33:21 【问题描述】:

OleDbConnection 访问同一网络中 Windows 共享上的 .mdb 文件时遇到问题。当它在使用部分结束时被丢弃,它需要超过 2 秒的时间。打开连接并执行查询或填充DataTable最多只需要50ms。

这是我的代码:

private const string DbConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;data source=\\server\share\file.mdb";
private const string DbConnectionStringIp = @"Provider=Microsoft.ACE.OLEDB.12.0;data source=\\192.168.1.1\\share\file.mdb";

using(var connection = new OleDbConnection())

    connection.ConnectionString = DbConnectionString;
    try
    
        connection.Open();
    
    catch(OleDbException)
    
        connection.ConnectionString = DbConnectionStringIp;
        connection.Open();
    

    const string query = "SELECT somefield FROM sometable WHERE someotherfield=1)";
    using(var command = new OleDbCommand(query, connection))
    
        using(var adapter = new OleDbDataAdapter(command))
        
            adapter.Fill(employees);
        
     
//From Here 

//To Here => 2 seconds

基本上“从这里”到“到这里”是代码中最耗时的部分。有没有idea,怎么这么慢?

【问题讨论】:

嗨,halliba,你找到解决方案了吗? 不,对不起。当时一个用户给了我一个提示,一个特定的命令执行得非常慢,我将问题分解为上面播种的行。几天后我辞职并使用了预缓存的结果。我只是在我们的环境中运行了代码,但错误仍然存​​在。祝你好运,如果你有同样的问题;) 我希望这是一个窗口开销,关闭和释放文件。共享文件夹中的 .ldb(锁定)文件需要多长时间才能被处理掉?如果 .mdb 文件在本地或非共享驱动器上,速度是否相同? 【参考方案1】:

我也遇到过这个问题,只是性能更差(调用 Dispose 大约需要 20 秒)。来自相关问题的建议解决了该问题:将以下内容添加到连接字符串:

OLE DB Services=-1;

【讨论】:

以上是关于OleDbConnection 处理很慢(2s)的主要内容,如果未能解决你的问题,请参考以下文章

JSON.net 直接从 oledbconnection 序列化

JSON.net 直接从 oledbconnection 序列化

使用两个DataAdapter使用OleDbConnection Excel到DataGridView

通过 OleDbConnection 获取单个记录的最佳方法是啥?

OleDbConnection.Open() 引发的 AccessViolationException

.xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表