Предыстория: у меня есть первая модель EF6 с базой данных в Visual Studio 2015 (последний nuget 6.1.3, указывающий на локальную базу данных SQL Server 2014 SP1 Express) на ноутбуке Windows 10 Pro. После того, как я обновился с Windows 8.1 и Visual Studio 2013., я также обновил модель от EF5 около 6 месяцев назад, но я не думаю, что это актуально, поскольку я также попытался восстановить с нуля.
Модель: набор из примерно 100 таблиц, 50 просмотров и 250 ассоциаций.
Проблема заключается в том, что каждый раз, когда я хочу внести изменения в свою модель, любой вид щелчка (слева или справа) на диаграмме .edmx
заставляет Visual Studio перестать отвечать на несколько минут. Я переместил все, что мог, на другую диаграмму (представления, в которых нет ассоциаций), которая не имеет этой проблемы, поэтому я предполагаю, что количество ассоциаций является проблемой. Для большинства из них требуются ассоциации внешних ключей, вытащенные из базы данных. Тем не менее, требуется около получаса, чтобы связать 3 ассоциации FK для просмотра моей основной диаграммы. Я могу понять, существует ли ограничение на сущности в модели, но я не понимаю, почему просто щелчок по диаграмме должен заставить Visual Studio перестать отвечать на запросы. Диспетчер задач показывает интенсивное использование ЦП и отсутствие использования диска.
Нажатие на любое из объектов прекрасно, так как перемещает их или редактирует. Проблема заключается в нажатии на фоновое полотно.
Я взял обновление модели из базы данных через браузер модели, но я не могу обойти это, щелкнув правой кнопкой мыши на диаграмме, чтобы создать новые ассоциации.
Я не видел никаких комментариев по этой проблеме в любом месте. Любые предложения причины или обходные пути?
BTW Я только что переустановил Windows 10 Pro и установил только SQL Server 2014 SP1 Express и Visual Studio 2105 Pro. Так что в моей системе ничего нет.
UPDATE: 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()
UPDATE2: у XtraSimplicity есть решение, которое работает для некоторых, но не для меня. Благодаря его предложениям я решил это как проблему с прямым графическим драйвером. В моем ноутбуке есть семейство графических адаптеров Intel HD и NVIDIA GeForce GT 750M. Intel является обычным активным адаптером, но проблема также возникает, когда включена только NVidia. Я также попробовал предложение отключить аппаратную поддержку в Visual Studio, но, если что-то, что просто делает производительность VS, когда edmx открыт еще хуже.