这些是我会为发布构建选择的推荐设置,所有这些设置都可以在项目属性的“构建”选项卡上找到:
-
取消选中“定义 DEBUG 常量”
-
取消选中“定义 TRACE 常量”
-
勾选“优化代码”
- 在“高级...”对话框下,将“调试信息:”设置为“pdb-only”
您可能还希望考虑使用ngen 来加快应用程序的启动时间。此过程必须在最终用户 PC 上完成(通常作为安装过程的一部分),但通常只会在首次运行时提高应用程序性能*。我的建议是,仅当您对应用的冷启动时间有特别担忧时,才考虑使用 ngen。
这些设置的实际作用是什么?
DEBUG 和 TRACE 常量
DEBUG 和 TRACE 常量会影响 conditional directives 中包含的任何代码,例如:(根据需要将 DEBUG 替换为 TRACE)
#if DEBUG
// Anything here will not appear in the end output unless the DEBUG constant is defined
#endif
它还会影响对标有Conditional attribute 的方法的任何调用,例如Debug.Write 和Trace.Write:
// The following call will not appear in the end output unless the DEBUG constant is defined
Debug.WriteLine("Test");
您可以使用IL Spy 之类的方式自行检查这两项。
请注意,这些常量没有其他影响,例如,如果定义了 DEBUG 常量,JITer 的行为不会有所不同。除非您大量使用条件指令,否则您可能会发现这些对您的应用程序的影响可以忽略不计。
优化代码
这控制编译器 (cs.exe) 和 JIT 编译器在编译代码时执行的优化。由于此设置,您可能会看到大部分性能改进。
以下问题更详细地介绍了此设置的作用:
调试信息
pdb-only 设置告诉编译器将所有调试信息放在单独的 .pdb(程序数据库)文件中。就最终组件而言,这与none 设置完全相同,因为组件不受影响,但是如果您使用pdb-only 设置(超过none 设置),则符号至少在以下情况下可用您希望(如果您不想分发它们,则不必分发它们)。这在调试故障转储时非常有用。
请注意,您不能“返回”并为现有程序集重新生成符号 - 一旦您丢失了程序集的 .pdb(或一开始就选择不创建),这几乎是永远失去!照顾好它(尤其是对于您“向野外”发布的程序集)。
您将在此处看到的唯一真正区别是输出程序集大小 - 这可能会影响加载时间和内存占用,但最终此设置可能不会产生特别明显的影响。
(*) 假设用户在第一次运行应用程序时练习了应用程序的大部分/所有功能 - JITing 过程在调用方法时完成。阅读 JITting / ngen 了解更多详情。