关于VS2010调试慢和运行慢的问题

来源:互联网 发布:手机淘宝宣传海报尺寸 编辑:程序博客网 时间:2024/04/29 15:41

1、VS2010调试慢

        之前VS2010调试很正常,但是最近一段时间调试很慢,一句代码都要执行好几十秒钟,实在是慢的让人无法忍受,根本不能愉快的进行调试了。说来也奇怪,有些工程是好的,比如新建的测试工程调试就比较快,但是我们的项目工程就异常的慢。也想过清理一些中间文件,将项目工程清理重新编译一遍,但是调试依旧是很慢。于是,到网上搜索了一下,找到了办法:在命令行中执行devenv.exe  /resetuserdata,将VS2010的环境重置一下。具体的做法是,到VS2010的开始菜单中找到“Visual Studio命令提示(2010)”,如下所示:


打开即切入VC的目录,C:\Program Files\Microsoft Visual Studio 10.0\VC,输入devenv.exe  /resetuserdata命令即可,如下:

        当然,也可以在windows的cmd窗口中手动切到C:\Program Files\Microsoft Visual Studio 10.0\VC目录去执行devenv.exe  /resetuserdata命令。

        注意,上述命令是将devnev.exe调起来,传递/resetuserdata命令参数,由devnev.exe来执行环境的重置,所以运行前要将所有的devnev.exe进程退出。再就是,此命令只是将devnev.exe进程调起来,调起来后命令行即返回,命令行返回不代表清理完成,只是将devnev.exe启动起来,清理需要一定的时间,可以通过查看任务管理器来检测清理是否完成,清理完成之前启动的devnev.exe即退出。所以要等清理任务完成后,再去启动VS打开项目工程。

2、VS2010运行慢

        以为使用devenv.exe  /resetuserdata命令清理后就万事大吉了,清理后确实调试速度恢复正常了,但是整个电脑非常的卡。因为做开发的,一般打开的任务进程比较多,会占用很多的内存和cpu资源,电脑会反映慢一点,但是VS据直接卡住了,假死,很久才有反应,导致整个机器都很卡。于是,查看任务管理器查看系统资源占用情况(主要看内存和CPU占用情况),结果发现多了好几个vcpksrv.exe进程,占用了很多内存,导致机器的内存都快被占满了,所以整个机器都很卡。而且vcpksrv.exe进程是自动启动的,杀掉后一会又自己启动了。于是搜索了一下vcpksrv.exe进程,得知是与VS的智能感知相关的,可以在VS的菜单栏中的工具->选项->文本编辑器->c++ ->高级中将智能感知的IntelliSense禁用掉,禁用后就没有vcpksrv.exe进程了,如下所示:


3、其他

        如果是重置VS2010的环境,则Visual Assist X会失效,需要重新安装破解一下。另外,如果在使用过程中出现VX Go的不准的情况下,可以尝试着到VX的选项中的performance页面,将历史缓存数据清理一下试试。VX的选项入口就在VX的工具栏按钮上,如下:

清理历史缓存数据的页面如下:

        另外,可能会出现打断点后断点无效的问题,比如如下所示:


其实代码已经重新编译过了,此时需要到选项中将“要求源文件与原始版本完全匹配”勾除掉,位置如下:


我的整理

Visual Studio 2010 Ultimate 版本有个新功能IntelliTrace(智能跟踪),IntelliTrace被引入到Visula Studio中来加速我们对.NET应用程序的调试,它通过对预先设置的事件和方法在运行过程中的跟踪并将其有效地传递给调试执行者,从而快速的传递程序在执行过程中的状态和各种信息来帮助开发者更好的调试程序,快速的发现问题。实际上,在Visual Studio 2010之前,Microsoft Visual Stuido已经帮助我们很好的继承了调试工具,比如对变量的监控,对堆栈的查看等等,并且允许设置断点进行单步调试等。所有的这些都在很好的帮助开发者来了解程序在不同的执行过程中的状态以及检测是否按照预先实际的逻辑进行运转,而且更多的,我们通过断点后监测程序状态来发现问题所在。而这样所存在的问题是,一些逻辑上的错误可能发生在断点执行之前,而且很可能是一些无法追查。开发者必须停止当前的调试,重新设置断点并启动调试,而这样的试验过程往往需要很多次才能找到正确的位置来设置断点。IntelliTrace智能的将一些调试信息和程序状态自动的跟踪并实施的展现给开发人员,从而减少了需要程序员找到适当的断点才能跟踪和监控程序运行状态的过程。

Visual Studio提供给我们两个方式来控制其搜集信息的内容源,一个是IntelliTrace events only,仅仅收集智能跟踪事件和调试中断的相关数据;另外一个是IntelliTrace events and call information,这个就会收集除了IntelliTrace事件之外对一个方法调用的进入和退出的各种数据。下边我们来看看在Visual Studio 2010中如何设置IntelliTrace的跟踪选项。

进入到工具 --> 选项 --> IntelliTrace。

     它在默认状态下是启用的,但是,仅捕捉事件,因为捕捉事件是便宜的。然而,当你开始跟踪所有这些调用信息时,真正的价值开始显现出来了。你每一次调试的时候,IntelliTrace都将弹出来,你在动态调试的时候可以使用这个历史性的调试工具。假如我在那里并且有一个断点,但是,我要备份和重新设计这个断点,我可以使用IntelliTrace完成这个任务。

使用IntelliTrace捕捉到调试进程的其他人可以把记录以及.dlls和pdbs文件发送给你,你可以重放它们的进程。这个进程也许进入到数据库(你没有这个数据库),它也许是采用你不能复制的方法设置的,它可能在你不能企及的网络上,但是,你不用担心,因为你拥有记录以及.dlls和pdbs文件,你可以重放。

        当然,拥有源代码会更好,因为那样你就能够看到这个代码好像是在你自己的机器上调试它一样。这对于在你的机器上运行正常,在其他人的机器不能运行的那些神秘的故障来说是非常好的。它对于多线程的情况也是非常好的,当你经过这个应用程序的时候,这个软件瑕疵就消失了,但是,在正常速度运行时,这个软件瑕疵又出现了。

 

2、如果还没解决问题

重新设置vs2010的环境(在vs2010命令提示符下,执行devenv.exe /resetuserdata)


0 0
原创粉丝点击