【问题标题】:Debug vs Release in optimization of .net (concerns when distributing to users).net 优化中的调试与发布(分发给用户时的担忧)
【发布时间】:2013-01-06 16:05:02
【问题描述】:

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

大多数时候我只是将 .exe 文件打包到 Debug 文件夹中(连同所需的依赖项)并提供给用户。

有什么理由比另一个更喜欢分发一个吗?

【问题讨论】:

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


【解决方案1】:

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

调试版本包含比发布版本更多的信息,并且许多编译器优化已针对调试版本关闭。

也可以在这里查看Debug/Release difference


有什么理由比另一个更喜欢分发一个吗?

是的。如果您想拥有一个经过优化编译的更快的二进制文件,请使用release

【讨论】:

  • Hanselman 弄错了(和往常一样),默认的发布版本实际上会生成调试符号。无论如何,它与这个问题不是很相关,它们不会影响任何东西,你只是不运送 pdb。
  • @HansPassant - 谢谢。我认为这些符号只在​​ pdbs 中,这在帖子中有点奇怪。
  • 究竟有什么安全隐患?
【解决方案2】:

没有我能想到的安全问题。肯定存在性能问题,程序集的调试版本包含一个属性 (DebuggableAttribute),它始终会阻止抖动优化器优化代码。这可以对正在运行的程序的性能产生很大的影响。抖动执行的优化记录在this answer

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

特定于 VB.NET,在没有附加调试器的情况下在用户计算机上运行时,发布 Debug 版本很容易导致程序崩溃并出现 OutOfMemoryException。由于 WeakReferences 上的泄漏而失败,Edit+Continue 使用它来跟踪具有 WithEvents 关键字的事件处理程序的类。

如果您不需要抖动优化器产生的性能增强并且不发布 VB.NET 程序集,那么无需担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2017-05-17
    • 2014-11-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多