Visual Studio CPU 高占用率

5

我已经使用Visual Studio(2010专业版、2012专业版和2015社区版)一周了,每当我开始一个项目即使是空的,几分钟后就会启动一个线程,占用一个核心,使用率达到100%。

从任务管理器中,我发现devenv.exe 占用了25%的CPU,因为我的电脑有4个核心,所以100/4=25。

通过使用Process Explorer,我发现 clr.dll (clr.dll!GetCLRFunction+10793) 在持续运行。

以下是该线程的堆栈跟踪:

ntoskrnl.exe!KeWaitForMultipleObjects+0xc0a 
ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x712
ntoskrnl.exe!KeWaitForSingleObject+0x19f
ntoskrnl.exe!PoStartNextPowerIrp+0xba0
ntoskrnl.exe!PoStartNextPowerIrp+0x183d
ntoskrnl.exe!IoFreeErrorLogEntry+0x297
System.ni.dll+0x19ab70
System.ni.dll+0x1de979
System.ni.dll+0x19ab70
System.ni.dll+0x199d42
System.ni.dll+0x1ded86
System.ni.dll+0x1de5fa
System.ni.dll+0x1de397
System.ni.dll+0x1da636
System.ni.dll+0x1c755e
System.ni.dll+0x19ebfb
System.ni.dll+0x19eccf
clr.dll+0x1396
clr.dll+0x291f
clr.dll!PreBindAssemblyEx+0x1822c
clr.dll!PreBindAssemblyEx+0x183af
mscorlib.ni.dll+0x2f1213
mscorlib.ni.dll+0x2f103e
mscorlib.ni.dll+0x2ffb72
mscorlib.ni.dll+0x30a366
mscorlib.ni.dll+0x2ffd30
mscorlib.ni.dll+0x3aebef
mscorlib.ni.dll+0x3aeaba
clr.dll+0x291f
clr.dll+0x9aff
clr.dll!PreBindAssembly+0xb165
clr.dll!PreBindAssembly+0x9653
clr.dll!PreBindAssembly+0x96bd
clr.dll!PreBindAssembly+0x978a
clr.dll!PreBindAssembly+0x9805
clr.dll!PreBindAssembly+0xb0f9
clr.dll!PreBindAssembly+0xa166
clr.dll!GetCLRFunction+0x107dc
ntdll.dll!RtlInitializeExceptionChain+0x63
ntdll.dll!RtlInitializeExceptionChain+0x36

有人能从上面的几行中理解到什么吗?

在互联网上,我找到了几个建议来禁用Visual Studio的一个或另一个插件/扩展,但是它们都没有解决问题,而且我在所有的VS版本上都遇到了这个问题(使用不同的扩展名并同时发生)。

我认为这与我最近更新的.NET Framework 4.5 ~4.6有关。 如何确定问题所在以及如何解决它呢?


解决方法:我已经卸载了 .Net Framework 4.6.1 SDK。没有它,任何 Visual Studio 都无法运行(2010、2012 和 2015)。重新安装后,问题就消失了。 - Giox
不,我什么都没解决!问题还在持续。每次我保存一个编辑过的文件(cs、js、html、aspx...),即使我只插入了一个空格,它都会发生。 - Giox
2个回答

4
为了了解为什么Visual Studio会导致高CPU使用率,您需要安装Windows性能工具包,它是Windows 10 SDK的一部分(如果您使用Windows 7,则使用SDK Build 15086,这是在Windows 7上运行的最后一个版本,对于Windows 8、8.1或Windows 10,请使用来自最新Windows 10 SDK的WPT)。 enter image description here (其他所有条目都可以取消选择) 运行WPRUI.exe,选择First LevelCPU Usage并单击start。捕获1分钟的CPU使用情况,现在单击Save将数据保存到ETL文件中。
现在双击生成的ETL文件,在Windows性能分析器(WPA.exe)中打开ETL,将CPU使用率(采样)拖放到分析窗格中进行分析:

enter image description here

现在在WPA中加载调试符号并展开devenv.exe的堆栈。

enter image description here

在我的情况下,Telerik扩展会导致Visual Studio内部的CPU使用率增加。

谢谢,我仍在使用 Windows 7。我通过卸载所有内容然后重新安装来解决了这个问题。可能问题是由 Telerik 扩展引起的,我也在使用它。 - Giox
这也可以在Windows 7上使用,只需使用15086 SDK。昨天我遇到了这个问题,并在这里查看是否已经有一个问题向用户展示如何调试此问题。 - magicandre1981

1
我曾经遇到过这样的问题,当时我正在使用一个第三方本地库,该库调用了_controlfp来更改浮点精度。在运行CLR时不支持这样做。即使它是在执行的代码中完成的,它也会锁定我的devenv.exe。
我怀疑你没有同样的问题,但以下是我用来追踪它的方法。
如果您能够可靠地重新创建它,在2015年,单击快速启动旁边的右上角的人物图标,然后选择“报告问题”。

enter image description here

在新窗口中选择问题区域“集成开发环境”,然后展开“记录操作以重现问题”并选择项目“要重现崩溃或挂起,请连接到另一个Visual Studio实例。”启动另一个Visual Studio副本,您应该看到它列出。

enter image description here

这将会记录一个ETW日志并将其放入bug报告中,当你点击提交时它会一起发送。日志将保存在%TEMP%\Microsoft\VSFeedbackCollector下(你可能需要在发送报告之前复制一份,因为我认为它会在发送报告后删除文件)。
一旦你获得了etl文件,你可以在你选择的etl查看器中打开它来开始挖掘导致高CPU负载发生的原因。

谢谢,我会做的。 - Giox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接