gpt4 book ai didi

entity-framework - EF6/代码优先:在第一个查询期间 super 慢,但仅在调试中

转载 作者:行者123 更新时间:2023-12-03 11:43:10 27 4
gpt4 key购买 nike

我使用的是带有代码优先策略的EF6 rc1,没有预先编译的 View ,问题是:
如果我编译并运行exe应用程序,则大约需要15秒钟才能运行第一个查询(没关系,因为我仍在处理预生成的 View )。但是,如果我使用Visual Studio 2013预览版调试完全相同的应用程序,则在运行第一个查询之前大约需要2分钟:

Dim Context = New MyEntities()
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here
Dim Item = Query.FirstOrDefault()

有办法消除这多余的时间吗?我在这里做错什么了吗?

附:上下文本身并不复杂,仅包含200多个表。

编辑:发现问题是在调试期间EF似乎是在生成 View 而忽略了预先生成的 View 。
使用EF的源代码,我发现该属性:
IQueryProvider IQueryable.Provider
{
get
{
return _provider ?? (_provider = new DbQueryProvider(
GetInternalQueryWithCheck("IQueryable.Provider").InternalContext,
GetInternalQueryWithCheck("IQueryable.Provider").ObjectQueryProvider));
}
}

是消耗时间的地方。但这很奇怪,因为调试只需要时间。我在这里想念什么吗?

编辑:找到与问题有关的更多信息:
使用Sysinternals的进程监视器,我发现那里的“desenv.exe”进程耗时很多。更具体地说,它的“线程退出”消耗时间。它将线程退出堆栈重复36次。我不知道此信息是否非常有用,但是我在堆栈中保存了一个“.cvs”,这是他的尸体:[...](编辑:删除了“.cvs”的尸体,我可以再次发布它如果有人真的认为它会有用,那么它就会变得困惑并且太大。

编辑:安装了VS2013 Ultimate和Entity Framework 6 RTM。安装了Entity Framework Power Tools Beta 4,并使用它来生成 View 。什么都没改变...如果我运行exe,则需要20秒,如果我“开始”调试,则需要120秒。

编辑:创建了一个小项目来模拟错误: http://sdrv.ms/16pH9Vm
只需在环境中直接通过.exe运行项目,单击按钮并比较加载时间。

最佳答案

连接调试器时,这是Lazy(EF正在使用)中的一个已知性能问题。我们目前正在努力解决(我们正在研究的当前方法是删除对Lazy的使用)。我们希望在修补程序版本中尽快发布此修复程序。您可以在我们的CodePlex网站http://entityframework.codeplex.com/workitem/1778上跟踪此问题的进度。

有关即将发布的6.0.2修补程序版本的更多详细信息,其中包括修复程序-http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx

关于entity-framework - EF6/代码优先:在第一个查询期间 super 慢,但仅在调试中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com