如何杀死mscorsvw.exe

时间:2011-06-24 15:05:31

标签: .net visual-studio ngen

mscorsvw.exe(预编译程序集的.NET优化)占据了我CPU的很大一部分--50-100%。

这篇文章(和许多其他人)说

  

ngen.exe executequeueditems

从命令行应该杀死它。对我来说,那个命令就是挂起。有没有更好的方法来杀死这个过程?

我没有尝试重启。在过去的几天里,我看到我的CPU利用率不止一次上升,我怀疑这是我的问题;我想知道如何杀死它。

6 个答案:

答案 0 :(得分:14)

尝试

ngen queue status

希望显示的不仅仅是“我正在运行”并显示它正在尝试编译的内容。 ngen queue stop命令将停止服务。

当安装程序部署程序集并要求服务使用ngen install预编译它时,此服务开始运行。很明显,你的机器上有一个坏的,我猜它是一遍又一遍地失败来编译程序集。检查Windows事件日志中是否有关于此问题的痕迹。卸载执行此操作的程序。

答案 1 :(得分:9)

  

这篇文章(和许多其他人)说

     
    

ngen.exe executequeueditems

  
     

从命令行应该杀死它。对我来说,那个命令就是挂起。还有更好的>杀死这个过程的方法?

都能跟得上;它不会杀死它。相反,它会使故意更糟。它不会滴流后台编译(通常你不会注意到它),而是一次处理所有排队的项目。这需要一些时间才能完成。它没有挂起,它将非常努力。当它完成后,它就完成了,并且没有更多的东西需要进行后台编译。

请注意,最近的升级(可能已安装了Service Pack)添加了(最有可能)后台编译作业。 Windows正在帮助您使用.NET JIT编译器编译所有托管程序集,这些编译器了解您的确切硬件和处理器类型,以便它将发出最优化的代码。通过这种方式,.NET可确保软件在未来以更快的速度运行,但代价是现在编译程序集

在你间接链接到yoursef的众多资源中,请阅读此内容,例如:

答案 2 :(得分:4)

在我看来,.NET有一些有问题的设计,当需要“Just In Time”编译器运行所有内容以便在它的时间之前编译它。

通常有两个mscorsvw守护进程运行,一个用于64位,一个用于32位(它们彼此同步)。 100%的CPU利用率是您对编译器的期望,但它是以低优先级完成的,并且一次不应超过一个核心。多核CPU的一个优点是,像这样的东西仍然是你驱动用户界面交互的核心。 (请注意,搜索索引器是同一种类型的另一个守护程序,按照相同的行设计。)如果你有一个单核CPU,那么你真的会注意到增加的负载。

答案 3 :(得分:2)

有时这会导致典型的bug。我的SQL Server案例msiexec.exe processes keep running after installation of SQL Server 2012 SP1按照惯例等待下一次更新。

答案 4 :(得分:1)

安装SQL 2012后我遇到了同样的问题。运行命令ngen队列状态后,我看到它正在运行的CLR优化过程。再次使用这个线程,我能够看到有两个服务Microsoft.NET Framework NGEN v4.0.30319_X64和Microsoft.NET Framework NGEN v4.0.30319_X64,表示32位和64位优化代码。

我看到这两个版本已经启动,x86版本是罪魁祸首。我停止了服务,CPU从100%恢复到0%,内存减少了大约2GB。

答案 5 :(得分:-3)

看,.NET谋杀单核心媒体中心电脑。旧电脑慢了好几个小时,基于网络的视频变得无法看到波涛汹涌。能源效率如此之高 - 我必须每周7天,每天24小时不间断地编制电脑吗?用户指导的流程不具有优先权。最好但它不会放弃自动更新......包括.NET!这引发了所有资源的另一次重新编译,永远不会在Patch Tuesday之前完成。我没有找到建议的解决方法('ngen.exe安装/队列'或'ngen.exe更新' - 在相关的框架目录中找到ngen)响应。所以。我在services.msc中禁用了Microsoft .NET Framework NGEN服务 - 或者通过命令行('sc config clr_optimization_v4.xxxx start = disabled',其中xxxx是版本号;通过sc查询或目录名或services.msc获取版本号); 'stop'只需几秒钟即可重启。考虑或尝试完全删除.NET 4.