首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器上的OleDBConnection.Close()非常慢

服务器上的OleDBConnection.Close()非常慢
EN

Database Administration用户
提问于 2017-06-14 11:42:32
回答 1查看 1.5K关注 0票数 0

我正在开发几个连接到MS数据库后端(.mdb)的应用程序来读取/插入/更新记录。

一切正常,但我注意到我的db操作非常慢。后端由其他用户访问,但在查询没有其他人连接的访问文件副本时,我仍然会遇到问题。

我设法缩小了范围,这样我就可以看到违规的代码是行了。

代码语言:javascript
复制
 connection.Close()

调用打开的OleDBConnection,它刚刚执行了一些查询,例如:

代码语言:javascript
复制
var con = new OleDbConnection(connectionString);
con.Open();
var query = "SELECT * FROM subGRCReceived WHERE GRVNo=@grv";
var args = new DynamicParameters();
args.Add("@grv", grvNumber);
// Using Dapper
var pallets = (List<Pallet>)con.Query<Pallet>(query, args);
con.Close(); // This is often taking between 7-10 seconds

我可以确认这是在使用using/con.Close()/con.Dispose(),时发生的,而使用或不使用Dapper也没有什么区别。

我确实注意到,这似乎只发生在基于web的prjojects (ASP MVCWCF soap服务)而不是控制台应用程序中。这个问题似乎是断断续续的,但发生的频率足以使用户感到痛苦(特别是当导航到页面时使用2-3 db查询,因为加载时间可能长达20秒)。

问题不在于代码本身,因为我能够在与服务器相同的网络上在笔记本上承载相同的应用程序,而且速度是完美的(每个请求大约200 as )。请参阅以下两台机器的规格:

笔记本电脑详细信息:

  • 处理器: Intel Core i7-6700HQ CPU @ 2.60GHz
  • RAM :16.0GB
  • 操作系统: Windows 10 x64

服务器详细信息

  • 处理器: Intel Xeon CPU E5-2603 v4 @ 1.70GHz (2个处理器)
  • 内存: 32.0 GB
  • OS : Windows 2012 x64

设置

  • 32位MS Access 2016
  • 2016微软ACE OLE引擎
  • 64 it OS

我已经尝试过的

  • 将数据库移动到与应用程序相同的文件夹。
  • 禁用防病毒(ESET)
  • 将注册表中Access Connectivity引擎中的MaxBufferSize键值从0增加(这需要重新启动吗?)
  • 在调用GC.Collect()之前测量运行Close()所需的时间,以确保它不是垃圾收集器

解决方案

线程化

我尝试从一个新线程调用Close(),这个线程似乎在1次请求后才能工作,但是如果我再次尝试访问应用程序,服务器上会出现未处理的win32错误(即使我用try/catch包装了线程和connection.Close()调用)。我怀疑这可能是失败的,因为线程可能需要7秒才能关闭连接,但是resources进程在此之前就会终止,因此Close()可能需要一些缺少的资源。如果我能做到这一点,可能会很好,但我知道这是我在MVC中的糟糕实践,而且也没有真正解决这个问题。

持久连接

我也可以只有一个OleDBConnection,并在整个会话中保持打开。我是在WCF服务(每个请求一个连接)中这样做的,它可以找到,但是我觉得它在ASP.MVC中不能很好地工作,在做了一些研究之后,看起来这不是一个好主意。

我已经为这件事挣扎了一周了,它让我发疯了,有人有什么建议吗?

EN

回答 1

Database Administration用户

发布于 2018-08-22 05:04:50

以我的经验来看,

其中一个access数据库超过20000条记录,大小约为150 MB。它开始放慢速度,性能急剧下降。所以移到了SQL。

您可以考虑使用SQL紧凑版或sql lite。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/176257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档