C# net优化中的调试与发布(分发给用户时的问题)
将C# net优化中的调试与发布(分发给用户时的问题),c#,.net,vb.net,visual-studio,C#,.net,Vb.net,Visual Studio,将Debug与Release构建分发给公众是否存在任何安全或性能问题 大多数时候,我只是将.exe文件打包到Debug文件夹中(以及所需的依赖项),并将其提供给用户 是否有任何理由更喜欢一个而不是另一个被分发?是的,当然有——安全和性能方面的影响 调试版本包含比发布版本更多的信息,调试版本的许多编译器优化都已停止 也可以在这里看到 是否有任何理由更喜欢一个而不是另一个被分发 对。如果您想要一个经过优化编译的更快的二进制文件,请使用release我想不出任何安全问题。当然存在性能问题,程序集的调
Debug
与Release
构建分发给公众是否存在任何安全或性能问题
大多数时候,我只是将.exe文件打包到Debug文件夹中(以及所需的依赖项),并将其提供给用户
是否有任何理由更喜欢一个而不是另一个被分发?是的,当然有——安全和性能方面的影响 调试版本包含比发布版本更多的信息,调试版本的许多编译器优化都已停止 也可以在这里看到
是否有任何理由更喜欢一个而不是另一个被分发
对。如果您想要一个经过优化编译的更快的二进制文件,请使用
release
我想不出任何安全问题。当然存在性能问题,程序集的调试构建包含一个属性(DebuggableAttribute),该属性将始终阻止抖动优化器优化代码。这会对正在运行的程序的性能产生很大的影响。jitter执行的优化记录在中
内存消耗可能有问题。垃圾收集器将以不同的方式运行,使局部变量保持活动状态,直到方法体结束。这是一个极端情况,假设您使用了真实的数据,那么在测试应用程序时应该诊断出这样的问题
特定于VB.NET,当程序在用户的计算机上运行且未连接调试器时,发布调试版本很容易导致程序因OutOfMemoryException而崩溃。由于WeakReferences泄漏,它失败。Edit+Continue使用WeakReferences跟踪具有WithEvents关键字的事件处理程序的类
如果您不需要jitter optimizer生成的性能增强功能,也不提供VB.NET程序集,那么就不必担心。Hanselman对此有很大的错误(与往常一样),默认版本实际上会生成调试符号。不管怎么说,这与这个问题不太相关,它们不会影响任何事情,你只是不发送PDB而已。@HansPassant-谢谢你。我认为这些符号只存在于PDB中,这在帖子中有点奇怪。确切的安全含义是什么?另请参见