Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# net优化中的调试与发布(分发给用户时的问题)_C#_.net_Vb.net_Visual Studio - Fatal编程技术网

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中,这在帖子中有点奇怪。确切的安全含义是什么?另请参见