首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用实体框架第一次调用数据库会花费更长的时间,即使这个数据库之前已经被调用过?

为什么使用实体框架第一次调用数据库会花费更长的时间,即使这个数据库之前已经被调用过?
EN

Stack Overflow用户
提问于 2020-11-01 20:39:01
回答 1查看 51关注 0票数 0

我使用实体框架从我的Access数据库中获取数据。我发现了这样的场景,我使用三种不同的查询调用数据库。我如何组织它们并不重要,第一个调用总是需要2到3秒,而其余的调用在几毫秒内执行。下面是一个小示例:

代码语言:javascript
复制
var myData1 = await myRepo.GetData1();
var myData2 = await myRepo.GetData2();
var myData3 = await myRepo.GetData3();

在这种情况下,myRepo.GetData1()需要2-3秒。剩下的代码运行得非常快。如果我重新排列它们,并首先调用myRepo.GetData2(),那么这一次将花费2-3秒,myRepo.GetData1()将运行得非常快。

起初,我以为这是第一次访问此数据库,但经过调试后,我意识到此db连接以前已经打开过。

我是不是遗漏了什么配置?

编辑:在进一步调试之后,看起来连接在几秒钟后被“重置”了。因此,在这个代码块之后,如果我在2秒后查询同一个DB,那么返回数据也需要2-3秒!有没有办法让连接保持“活跃”?

EN

回答 1

Stack Overflow用户

发布于 2020-11-02 05:38:37

在流程中第一次引用DbContext定义时,实体框架DbContext具有预热成本。这种热身是为了解析所有已配置的映射,实际上与建立数据库连接没有太多关系。

当您的应用程序第一次启动时,您可以启动一个简单、快速的查询来启动预热,例如:

代码语言:javascript
复制
var result = _context.Users.Any();

这可以用作预热以及数据库连接是否可用的验证。初始化是静态的,因此新的作用域DbContexts (例如每个会话或using块中的作用域)不会产生额外的预热成本。如果您定义了多个DbContexts (即有界的DbContexts ),则即使指向同一数据库,也需要预热每个定义。

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

https://stackoverflow.com/questions/64631983

复制
相关文章

相似问题

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