Entity Framework edmx 点击图很慢

Entity Framework edmx click on diagram very slow

背景优先:我在 Visual Studio 2015 中有一个数据库优先的 EF6 模型(最新的 nuget 6.1.3 指向本地 SQL Server 2014 SP1 Express 数据库)在 Windows 10 Pro笔记本电脑。在我从 Windows 8.1 和 Visual Studio 2013 升级之后。我也在大约 6 个月前从 EF5 升级了模型,但我认为这不相关,因为我也尝试过重建从头开始。

模型:一组约 100 个表、50 个视图和 250 个关联。

问题是每次我想更改我的模型时,.edmx 图表上的任何类型的单击(向左或向右)都会导致 Visual Studio 在几分钟内没有响应。我已经将我能做的一切都移到了另一个没有这个问题的图表上(大部分没有关联的视图),所以我假设关联的数量是问题所在。其中大部分是从数据库中提取的必需外键关联。然而,在我的主图上查看 3 个 FK 关联需要大约半小时 link。我可以理解模型中的实体是否存在限制,但我不明白为什么只需单击图表就会使 Visual Studio 变得无响应。任务管理器显示 CPU 使用率很高,但没有磁盘使用。

点击任何实体都可以,移动它们或编辑它们也是如此。问题是点击背景 canvas.

我已经开始通过模型浏览器从数据库更新模型,但是我无法使用右键单击图表来创建新关联。

我在任何地方都没有看到关于这个问题的任何评论。有任何原因或解决方法的建议吗?

顺便说一句,我刚刚重新安装了 Windows 10 Pro,只安装了 SQL Server 2014 SP1 Express 和 Visual Studio 2105 Pro。所以我的系统上没有任何自定义。

更新:ProcDump 在 DevEnv.exe 变得无响应时提供此堆栈跟踪,建议本机代码搜索图形对象:

[External Code] 
[Managed to Native Transition]  
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!<Module>.GeoSCursor.search(GeoSCursor* value)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.GetObjectsInRect(LRECT bbox, Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGLayoutObjectList items, VSGLayoutObject** ignoreItems, int numberItems, int numbertypes, int* types, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.GetObjectsInRect(LRECT bbox, Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGLayoutObjectList items, VSGLayoutObject** ignoreItems, int numberItems, int numbertypes, int* types, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.GraphObject.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGGraph.get_ObjectsInRectangle(double x0, double y0, double x1, double y1, bool searchSubGraphs)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.HitTest(Microsoft.VisualStudio.Modeling.Diagrams.RectangleD hitArea, bool requireCompleteContainment, bool searchSubGraphs) 
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.SpatialQuery(Microsoft.VisualStudio.Modeling.Diagrams.GraphWrapper.SpatialDirection direction, Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement currentShape, Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement parentShape)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement.FindNextInChildShapes(Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement startFromChildShape, bool focusableRequired)
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.14.0.dll!Microsoft.VisualStudio.Modeling.Diagrams.ShapeAccessibleObject.GetChild(int index)
System.Windows.Forms.dll!System.Windows.Forms.AccessibleObject.GetFocused()
System.Windows.Forms.dll!System.Windows.Forms.AccessibleObject.Accessibility.IAccessible.accFocus.get()
System.Windows.Forms.dll!System.Windows.Forms.InternalAccessibleObject.System.Windows.Forms.UnsafeNativeMethods.IAccessibleInternal.get_accFocus()

更新 2:XtraSimplicity 有一个适用于某些人但不适用于我的解决方案。多亏了他的建议,我已经将其排除为直接图形驱动程序问题。我的笔记本电脑中有 Intel HD Graphics Family 和 NVIdia GeForce GT 750M 显示适配器。 Intel 是通常的活动适配器,但仅启用 NVidia 时也会出现此问题。我也尝试过在 Visual Studio 中禁用硬件支持的建议,但如果有任何东西在打开 edmx 时会使 VS 的性能更差的话。

我无法发表评论,因为我刚刚达到最低评论声望,但我一直遇到完全相同的问题。

和你一样,我重新安装了 Windows 10(企业版)和 Visual Studio(2013 Pro 和 2015 Pro)都没有用。

目前,我已将其搁置一旁,并通过结合使用 DevArt 的 Entity Developer (https://www.devart.com/entitydeveloper/) 和手动编辑 类 来解决它数据库更改。

这很乏味,而且没有太多乐趣 - 但它对我有用(目前)。

希望这对某人有所帮助。

编辑:

对于以后可能遇到此问题的人 post,以下内容似乎已为我解决了此问题:

  • 导航到工具 > 选项 > 常规
  • 取消勾选 "Automatically adjust visual experience based on client performance"
  • 取消勾选 "Use graphics acceleration if available"

虽然你可能不需要,但我没有勾选 "Enable rich client visual experience"。

如果这不起作用,请查看此答案下方的评论 - 它可能有用。 :)

来源:http://pinter.org/?p=2611

编辑 2:

我的问题又回来了,经过进一步调查,它似乎是由远程桌面引起的(我目前使用的是 ESXi 托管的 Windows 10 VM)。切换到 VNC 或使用 VMWare VSphere Web 控制台会导致 Visual Studio 运行 完全正常。希望这对某人有帮助! :)

这是 Microsoft.VisualStudio.Modeling.Sdk 在 Windows 10 上的一个问题,也会影响 LINQ to SQL (DBML) 设计器。拥有 VS 建模 SDK 的团队目前正在处理此问题。我们在 EF 项目站点 https://entityframework.codeplex.com/workitem/2861 上跟踪它时遇到问题。我们会及时更新该问题的进展情况、修复程序的可用性、解决方法等。

我们在 2 台配备 Windows 10 和触摸屏的笔记本电脑上遇到了同样的问题。终止进程 TabTip.exe 似乎可以解决问题。

来源:https://connect.microsoft.com/VisualStudio/Feedback/Details/2011437

在 TabTip.exe(触摸键盘和手写面板)上转到任务管理器并结束进程。这样做之后,设计师会做出很好的回应。请注意,如果您单击或触摸任务栏中的键盘图标,TabTip.exe 将重新启动。

我尝试了接受的答案,它确实对我有用,但是重新启动时问题又回来了。我也尝试了其他答案但没有成功。我发现了有问题的 windows service 并使用 Windows 10 服务管理屏幕来禁用该服务。我希望这对其他人有帮助。


如何完全禁用该服务

禁用服务:

  1. 用户 windows 开始搜索(通过开始菜单)并输入:服务
  2. 您应该会看到一个名为“服务”的 windows 桌面应用程序(打开它)。
  3. 查找名为 "Touch Keyboard and Handwriting Panel Service" 的服务。
  4. 打开它的属性(右键单击它)。
  5. 在“常规”选项卡下,将启动类型设置为 "Disabled"。
  6. 如果它还没有弯腰,请停止服务。

验证:

  1. 打开Visual Studio的EDMX,你应该马上就能注意到不同之处,如果没有,那么你可能不会遇到和我一样的问题。
  2. 重启电脑再测试EDMX,应该不会慢。

注意:这确实会有点干扰您的手势和触摸板,所以如果您经常使用它,请不要这样做。本指南适用于 windows 10,对我有用,但可能不适合你。此外,我还没有测试 Windows 更新是否会重新启用该服务。

如果您安装了扩展程序 productivity power tools,请在开始使用 entityframework 图表之前禁用它,然后在完成后将其禁用。我不经常进入我的 entityframework 图表,所以这对我有用。

  • 首先打开位于 ProjectName.edmx.

    下的 ProjectName.edmx.diagram 文件
  • 现在向下滚动,如果您在 </edmx:Diagrams> un</edmx:Designer> </edmx:Edmx> 之后看到任何随机代码行。 重复上千次就是这个原因

  • 删除那个或删除数据库并重新创建。

如果这对任何人有帮助。有同样的问题。当我尝试从数据库生成模型时,大约需要 18 分钟。 我是 运行 EF 6.1.3。 Sql Server 2014 管理工作室。对比 2015。 我 运行 这个命令现在它非常快,就像几秒钟一样。 “更改数据库行集 COMPATIBILITY_LEVEL = 110” 您需要重新启动 sql 服务器服务。