优化.net时的调试与发布(分发给用户时的问题)

sha*_*345 10 .net c# vb.net visual-studio

向公众分发Debugvs Release构建是否存在任何安全性或性能问题?

大多数时候,我只是将.exe文件打包在Debug文件夹中(以及所需的依赖项)并将其提供给用户.

是否有理由更喜欢分发一个而不是另一个?

Ode*_*ded 10

是的,当然有 - 安全性和性能影响.

调试版本包含的信息多于发布版本,并且许多编译器优化都不适用于调试版本.

另请参阅调试/发布差异.


是否有理由更喜欢分发一个而不是另一个?

是.如果您想要使用优化编译的更快的二进制文件,请使用release.

  • Hanselman得到这个非常错误(像往常一样),默认版本构建确实生成调试符号.无论如何,它与这个问题不太相关,它们不会影响任何东西,你只是不发送pdbs. (2认同)

Han*_*ant 8

我无法想到安全问题.肯定存在性能问题,程序集的Debug构建包含一个属性(DebuggableAttribute),它总是会阻止抖动优化器优化代码.这可以对正在运行的程序的性能产生很大的影响.此答案中记录了抖动执行的优化.

你可能会遇到内存消耗问题.垃圾收集器将以不同的方式运行,使本地变量保持活动状态,直到方法体结束.这是一个极端情况,并且在测试应用程序时应该已经诊断出这样的问题,假设您使用了实际数据.

特定于VB.NET,运行Debug构建很容易导致程序在用户的机器上运行而没有连接调试器时因OutOfMemoryException而崩溃.它由于WeakReferences上的泄漏而失败,由Edit + Continue用于跟踪具有WithEvents关键字的事件处理程序的类.

如果您不需要抖动优化器生成的perf增强功能,并且不提供VB.NET程序集,那么就不用担心了.