Ada*_*lho 22 entity-framework entity-framework-6 visual-studio-2013
我正在使用EF6 rc1与Code First策略,没有预编译视图,问题是:如果我编译并运行exe应用程序,运行第一个查询需要15秒(这没关系,因为我还在处理前 - 生成的观点).但是,如果我使用Visual Studio 2013 Preview来调试完全相同的应用程序,那么在运行第一个查询之前需要将近2分钟:
Dim Context = New MyEntities()
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here
Dim Item = Query.FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)
有没有办法消除这个额外的时间?我在这里做错了吗?
Ps.:上下文本身并不复杂,它只有200多个表.
编辑:发现问题是在调试期间,EF似乎生成忽略预先生成的视图的视图.使用EF的源代码我发现了属性:
IQueryProvider IQueryable.Provider
{
get
{
return _provider ?? (_provider = new DbQueryProvider(
GetInternalQueryWithCheck("IQueryable.Provider").InternalContext,
GetInternalQueryWithCheck("IQueryable.Provider").ObjectQueryProvider));
}
}
Run Code Online (Sandbox Code Playgroud)
是时间消耗的地方.但这很奇怪,因为调试只需要一些时间.我在这里错过了什么吗?
编辑:找到更多与问题相关的信息:使用进程监视器(由Sysinternals)我发现它的'desenv.exe'进程耗费了大量时间.更具体地说,它是"螺纹退出"的消耗时间.它重复36次线程退出堆栈.我不知道这个信息是否非常有用,但我用堆栈保存了一个'.cvs',这是他的身体:[...](编辑:删除'.cvs'的身体,我可以再次发布通过评论,如果有人真的认为它将有用,但它是混乱和太大.)
编辑:安装VS2013 Ultimate和Entity Framework 6 RTM.安装了Entity Framework Power Tools Beta 4并使用它来生成视图.什么都没有改变......如果我运行exe需要20秒,如果我'开始'调试它需要120秒.
编辑:创建一个小项目来模拟错误:http://sdrv.ms/16pH9Vm 只需在环境中运行项目并直接通过.exe,单击按钮并比较加载时间.
Row*_*ler 13
这是附加调试器时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
| 归档时间: |
|
| 查看次数: |
8095 次 |
| 最近记录: |