为什么在.NET中分发应用程序的Debug版本是一种不好的做法?

Osc*_*ros 4 deployment debugging installer visual-studio

阅读这个问题,在第一条评论中,@科迪格雷说:

嗯,你知道你不应该重新发布"Debug"版本,对吧?

我很担心.在Visual Studio中,我通常在调试模式下开发我的应用程序,如果我需要分发可执行文件,我所做的就是压缩.exe所需的.dll文件(在bin\Debug文件夹中).

为什么这是个坏主意?

这样做和在发布模式下完全相同的东西有什么区别?

编辑:
我刚才问过这个问题,但我只是想编辑它以增加差异:

Debug.Assert在代码中使用它来测试它,并在发布模式下编译时,所有这些行都消失了,所以这可能是另一个区别.

Han*_*ant 8

这取决于您使用何种语言来开发您的程序.使用C++时,您将获得/ RTC和Edit + Continue支持的开销.如果你使用递归,它们会大大降低生成的代码的速度,并使你的应用程序很可能在StackOverflow上早期崩溃.没有调试器,您可以很难诊断从检查代码中获得的运行时异常.

如果您使用VB.NET,那么当您在没有调试器的情况下使用Debug构建时,您将很容易出现不可插拔的内存泄漏.编辑+继续支持代码中的缺陷导致包含WithEvents事件的类的每个实例都泄漏WeakReference.您的应用最终会因OutOfMemory异常而死亡.

如果使用C#,那么heckofalot就不会出错,JIT编译器只能阻止生成优化的机器代码,垃圾收集效率也不高.您的程序将运行缓慢并消耗超过必要的内存.这也适用于VB.NET和C++/CLI.

在编写代码时,Perf通常是程序员的首要考虑因素.因此,发布调试版本有点亵渎神明.然而,大量程序通常由I/O,磁盘,网卡或dbase服务器完全限制.在这种情况下,原始cpu perf并不重要.