怎样在调试状态下加快速度?

anthony1119 2017-10-19 09:32:42
以Convert.ToDouble为例,如果输入字符串就会报错
但是把Convert.ToDouble写在Try Catch中捕捉错误可以在catch中输出另一个值,运行debug文件看上去都是正常的,但是一旦进入调试,输出栏会一直打印“System.FormatException”类型的第一次机会异常在 mscorlib.dll 中发生,也不知道在Try中进行了多久,总是使调试速度非常低,大神们知道什么好的解决办法吗?
...全文
487 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilikeff8 2017-10-19
  • 打赏
  • 举报
回复
实际上和你直接运行exe没什么区别
ilikeff8 2017-10-19
  • 打赏
  • 举报
回复
先切换成release模式 再菜单“”调试“”->选项->启用“仅我的代码” 运行->弹出的是否禁用仅我的代码的警告框里选择“继续调试””, 就不再输出任何调试信息了,连断点都无效
圣殿骑士18 2017-10-19
  • 打赏
  • 举报
回复
引用 2楼我是你的主体 的回复:
[quote=引用 1 楼 daixf_csdn 的回复:] 调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote]调试再慢也不可能达到被人感觉到的程度,所以我说你还不会用调试器,对调试器的一些行为产生了误解。也没看明白你到底产生了什么误解。
闭包客 2017-10-19
  • 打赏
  • 举报
回复
使用 visual studio 的调试,是会多做很多额外的工作的,比如加载断点。 你这个异常的输出也是其中一个额外的工作,不过我的印象中,这个输出的耗时是非常的短的。 总的来说,如果在 visual studio 中执行长时间的循环任务,都会有一些意想不到的对速度的影响,和你执行执行 debug.exe 是截然不同的。我的解决办法是需要调试长时间执行的任务的时候,不使用 visual studio 的调试功能,而是自己记录日志信息。
exception92 2017-10-19
  • 打赏
  • 举报
回复
引用 3 楼 xian_wwq 的回复:
[quote=引用 2 楼 anthony1119 的回复:] [quote=引用 1 楼 daixf_csdn 的回复:] 调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote] 异常机制的开销是非常大的, 1.最好的方法是对输入进行验证,而不是等着出错; 2.试下TryParse方法,TryParse方法在转换失败时不引发异常,可以省去异常捕获处理。[/quote] 是的,用TryParse 是可以的。
cancerser 2017-10-19
  • 打赏
  • 举报
回复
你可以尝试先判断是否为数字,然后再进行转换
判断方法可以用正则,网上很多例子
exception92 2017-10-19
  • 打赏
  • 举报
回复
引用 2 楼 anthony1119 的回复:
[quote=引用 1 楼 daixf_csdn 的回复:] 调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote] 异常都是在catch中捕获的。 什么叫停留那么久? catch 捕获了不可修复的异常,自然会挂起程序,不会继续执行,除非你停止调试。
xian_wwq 2017-10-19
  • 打赏
  • 举报
回复
引用 2 楼 anthony1119 的回复:
[quote=引用 1 楼 daixf_csdn 的回复:] 调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote] 异常机制的开销是非常大的, 1.最好的方法是对输入进行验证,而不是等着出错; 2.试下TryParse方法,TryParse方法在转换失败时不引发异常,可以省去异常捕获处理。
anthony1119 2017-10-19
  • 打赏
  • 举报
回复
引用 1 楼 daixf_csdn 的回复:
调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间
圣殿骑士18 2017-10-19
  • 打赏
  • 举报
回复
调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
圣殿骑士18 2017-10-19
  • 打赏
  • 举报
回复
异常是意外发生的,你搞成频繁发生的,就不对了
圣殿骑士18 2017-10-19
  • 打赏
  • 举报
回复
输出这么多异常,说明你程序里,1.频繁的调用todouble方法,2.而且传入了非法参数。这两个问题都应该解决
anthony1119 2017-10-19
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
[quote=引用 2 楼 anthony1119 的回复:] [quote=引用 1 楼 daixf_csdn 的回复:] 调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看
我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote] 异常都是在catch中捕获的。 什么叫停留那么久? catch 捕获了不可修复的异常,自然会挂起程序,不会继续执行,除非你停止调试。[/quote] 写在DLL中的函数不方便改,在这种情况下还能有什么办法吗?看上去就好像实在不停地尝试去执行异常的地方,然后到达一定次数之后才进入到Catch中输出null。不知道我理解的对不对,总之耗时的地方就是上面讲的地方,具体见上面。
anthony1119 2017-10-19
  • 打赏
  • 举报
回复
引用 9 楼 ilikeff8 的回复:
先切换成release模式 再菜单“”调试“”->选项->启用“仅我的代码” 运行->弹出的是否禁用仅我的代码的警告框里选择“继续调试””, 就不再输出任何调试信息了,连断点都无效
我需要断点进去看值的,所以不能用release模式啊
anthony1119 2017-10-19
  • 打赏
  • 举报
回复
引用 8 楼 daixf_csdn 的回复:
[quote=引用 2楼我是你的主体 的回复:][quote=引用 1 楼 daixf_csdn 的回复:]
调试本来就要慢呀?而且看来你还不太会用调试器,先找调试器的文章看看

我的意思是System.FormatException是在Try中出现的,那么一出错就应该执行Catch中的命令,为什么仍然会在Try中停留那么久?能不能通过设置减少这个不必要的时间[/quote]调试再慢也不可能达到被人感觉到的程度,所以我说你还不会用调试器,对调试器的一些行为产生了误解。也没看明白你到底产生了什么误解。[/quote]
感谢各位耐心回答!
我说的仔细点吧,调试的时候我发现解析xml的速度很慢,并且输出窗口一直刷新如下的提示,

然后我通过打印日志找到了占用时间的地方是一个dll中的一个函数

可以看到就是简单的调用系统的Convert.ToDouble,catch到了输入格式不正确的异常,但是处理这个异常代码中写的是输出一个null,那一旦捕捉到错误就会输出null,为什么会这么费时呢?
因为这个导致我解析一个几十K的xml文件需要用几十秒的时间,1MB左右的xml甚至需要解析大半个小时,而这期间VS的输出窗口一直提示上面图中的错误,并且不断地刷新信息。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧