【发布时间】:2011-07-25 18:27:22
【问题描述】:
在 Visual Studio 中,当您编译代码以将其安装在生产环境中时,您是否将配置更改为“发布”?如果你这样做了,你是否发现了一些性能改进,或者你这样做是因为其他一些因素?你能分享一下这个因素吗?
【问题讨论】:
标签: .net visual-studio compilation configuration-management
在 Visual Studio 中,当您编译代码以将其安装在生产环境中时,您是否将配置更改为“发布”?如果你这样做了,你是否发现了一些性能改进,或者你这样做是因为其他一些因素?你能分享一下这个因素吗?
【问题讨论】:
标签: .net visual-studio compilation configuration-management
发布模式代码通过编译器优化,所有调试符号都被删除,项目状态信息被丢弃,以及更多以尽可能高效和轻松地运行它。将库的发布模式版本发布到生产环境始终是一个好主意。
但是,有一个技巧可以两全其美:http://www.hanselman.com/blog/PermaLink.aspx?guid=a40c0d4f-66d0-4704-94f6-0efda4a44465
【讨论】:
针对您部署的内容将其更改为发布。发布目标开启优化。所有其他因素都等于您的代码更快。改进程度取决于您的代码。
Release 还会关闭 DEBUG 和 TRACE 常量。两者都可能执行额外的代码,甚至创建您在生产环境中通常不需要的文件访问(写入日志)。
【讨论】:
当您将配置设置为“调试”时,编译器会生成大量额外信息,以便您在 Visual Studio 中单步执行您的代码。如果您正在创建一个库,或者任何真正的东西,并且您希望它成为生产,您不想发布调试版本。它会变得臃肿。此外,如果它不能优雅地处理崩溃(不是你应该首先拥有任何崩溃:P)。
具体来说,编译器不会像通常那样优化事物,因为它需要某些信息才能返回给调试器。发布版本肯定会运行得更快,但并不总是能显着提高性能。
【讨论】:
您通常会使用发布配置。调试版本通常是更大的文件,有时更大;它们通常使用比释放配置更多的内存(因为它们填充变量/全局变量以用于调试内存管理等),并且它们执行不同的释放因为它们将未初始化的变量初始化为特定值(通常都是 \0,但我认为每个项目都可以定义)。
由于它们还包含调试信息,它可以让最终用户更轻松地对可执行文件/库进行逆向工程,而您可能不希望他们这样做。
生产环境很可能还需要安装调试库,这会添加到您必须与应用打包的可再分发文件中。
【讨论】:
我们设置了构建服务器来为 QA 进行发布构建(我们会发布我们测试的内容)。
据我了解,在发布模式下生成的程序集是:
有关更多详细信息,请查看以下内容:
【讨论】: