我有一个星期,我有任何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框架4.5~4.6有关。 我如何理解问题的位置以及解决方法?
答案 0 :(得分:2)
要了解Visual Studio导致如此高CPU使用率的原因,您需要安装Windows Performance Toolkit,它是Windows 10 SDK的一部分(如果您使用Windows 7,use the SDK Build 15086,这是最后一个适用于Windows 7的版本,适用于Windows 8,8.1或Windows 10,使用最新Windows 10 SDK中的WPT。
运行 WPRUI.exe ,选择第一级, CPU使用率,然后点击开始。捕获1分钟的CPU使用量,现在单击保存将数据保存到ETL文件中。
现在双击生成的ETL文件以在Windows性能分析器(WPA.exe)中打开ETL,将CPU Usage(Sampled)拖放到analyze窗格中:
现在load debug symbols in WPA并展开devenv.exe
在我的情况下,Telerik扩展导致Visual Studio内的CPU使用。
答案 1 :(得分:1)
当我正在使用的第三方本机库调用_controlfp
来更改浮点精度时,我个人遇到过这种情况。在CLR下运行时不支持这样做。即使它是在已执行的代码中完成的,它也会锁定我的devenv.exe。
我怀疑你遇到了同样的问题,但我这样做是为了追踪它。
如果您可以可靠地重新创建它,请在2015年点击快速启动旁边右上角的人员图标,然后执行"报告问题"。
在新窗口中选择问题区域"集成开发环境",然后展开"记录您的操作以重现问题"并选择项目"要重现崩溃或挂起,请附加到另一个Visual Studio实例。"。启动Visual Studio的另一个副本,您应该看到它已列出。
这将记录一个ETW log并将其放入当您点击提交时它将发送的错误报告中。该日志将保存在%TEMP%\Microsoft\VSFeedbackCollector
下(您可能希望在发送报告之前获取它的副本,因为我认为它会在发送报告后删除文件)。
获得etl文件后,您可以在您选择的etl查看器中打开它,开始深入研究导致高CPU负载发生的原因。