附加调试器的C#代码非常慢; MemoryMappedFile的错?
我有一个客户端/服务器应用程序。 服务器组件运行,以“远程处理”方式使用WCF(二进制格式化程序,会话对象)。
如果我启动服务器组件并启动客户端,则服务器执行的第一项任务在<0.5秒内完成。
如果我在连接了VS调试器的情况下启动服务器组件,然后启动客户端,则任务需要20秒才能完成。
没有代码更改 – 没有条件编译更改。 无论我是否在32位,64位,VS主机进程,没有VS主机进程或这些东西的任何组合的情况下编译和运行服务器组件,都会出现同样的情况。
可能很重要 :如果我使用VS.NET 探查器 (采样模式),那么应用程序运行速度就像没有附加调试器一样。 所以我不能那样诊断它。 刚检查,仪表模式也快速运行。 对于并发性分析模式,同样快速。
关键数据:
测量性能:
我的想法:
所有人似乎都不太可能。
所以,我的问题:
- 为什么会这样?
- 如果#1未知,我该如何诊断/发现?
例外可能会显着影响应用程序的性能。 有两种类型的exception:第一次机会exception(使用try / catch块正常处理的exception)和未处理的exception(最终会使应用程序崩溃)。
默认情况下,调试器不显示第一次机会exception,它只显示未处理的exception。 默认情况下,它还仅显示代码中发生的exception。 但是,即使它没有显示它们,它仍然会处理它们,因此它的性能可能会受到影响(特别是在负载测试或大循环运行中)。
要在Visual Studio中启用第一次机会exception显示,请单击“调试|exception”以调用“exception”对话框,并在“公共语言运行时”部分中选中“抛出”(您可以更具体地选择您想要的第一次机会exception)查看)。
要启用源自应用程序中任何位置的第一次机会exception显示,而不仅仅是代码,请单击“工具|选项|调试|常规”并禁用“启用我的代码”选项。
对于这些特定的“取证模式”情况,我还强烈建议启用.NET Framework源步进(它需要禁用“启用我的代码”)。 理解正在发生的事情是非常有用的,有时只是看着调用堆栈非常鼓舞人心 – 特别是在宇宙辐射混合的情况下有用:-)
两篇相关的有趣文章:
由于这是谷歌搜索这个问题的第一个结果之一,我想在这里添加我的问题解决方案,希望在我的情况下节省2个小时的研究。
我的代码从没有调试器的30秒减慢到使用调试器4分钟。 因为我忘了删除一个条件断点。 这些似乎极大地减缓了执行速度,因此请注意这些
上述就是C#学习教程:附加调试器的C#代码非常慢; MemoryMappedFile的错?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020917.html