我遇到了下面这段话:
“在Visual Studio中编译代码时,集成开发环境中的调试与发布设置对performance…几乎没有影响生成的代码几乎是相同的。C#编译器实际上并不做任何优化。C#编译器只会输出IL…在运行时,JITer完成了所有的优化。JITer有一个调试/发布模式,这对性能有很大的影响。但这并不决定您是否运行项目的Debug或Release配置,而是决定是否附加了调试器。“
来源是here,播客是here。
有人能帮我找到一篇微软的文章来证明这一点吗?
谷歌搜索"Debug performance“主要返回的结果是:"C#有很多性能命中率”,"release是优化的“,以及”不要将debug部署到生产环境中“。
发布于 2010-03-15 17:25:54
部分正确。在调试模式下,编译器为所有变量发出调试符号,并按原样编译代码。在发布模式下,包含了一些优化:
调试未使用的变量根本不会被编译,如果一些循环变量被证明是在# invariants
剩下的就看JIT了。
Eric Lippert提供的here优化的完整列表。
发布于 2010-03-15 22:08:28
没有一篇文章可以“证明”任何关于性能问题的东西。证明关于更改的性能影响的断言的方法是尝试两种方法,并在现实但受控的条件下对其进行测试。
你问的是关于性能的问题,所以很明显你关心的是性能。如果您关心性能,那么正确的做法是设置一些性能目标,然后为自己编写一个测试套件,跟踪您相对于这些目标的进度。一旦你有了这样的测试套件,你就可以很容易地用它来测试诸如“调试构建较慢”之类的语句的真假。
此外,您将能够获得有意义的结果。“更慢”是没有意义的,因为不清楚它是慢了1微秒还是慢了20分钟。“在现实条件下慢10%”更有意义。
把你本可以花在网上研究这个问题的时间花在构建一个可以回答这个问题的设备上。这样你会得到更准确的结果。你在网上读到的任何东西都只是对可能发生的事情的猜测。根据您自己收集的事实进行推理,而不是从其他人对您的程序可能如何运行的猜测中进行推理。
发布于 2010-03-15 17:25:20
我不能对性能发表评论,但“不要将调试部署到生产环境中”的建议仍然有效,因为调试代码在大型产品中通常会做很多不同的事情。一方面,您可能激活了调试开关,另一方面,可能会有额外的冗余健全性检查和调试输出,而这些并不属于生产代码。
https://stackoverflow.com/questions/2446027
复制相似问题