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

时间:2013-01-06 16:05:02

标签: c# .net vb.net visual-studio

DebugRelease版本分发给公众是否存在安全性或性能问题?

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

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

2 个答案:

答案 0 :(得分:10)

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

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

另见Debug/Release difference此处。


  

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

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

答案 1 :(得分:8)

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

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

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

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