我有一个 .net 4.0 类库项目,当我在发行版中编译它时,我注意到二进制文件 (.dll) 的大小并不比调试文件小。为什么是这样?不应该更小吗?它也应该执行得更快一点,不是吗?另外,我如何判断 .dll 是否已构建为调试或发布?
问问题
269 次
2 回答
1
当您构建程序集的发布版本时,C# 编译器生成的 IL 几乎没有什么区别。它所做的唯一值得注意的事情是省略了帮助您在花括号上设置断点的 NOP 指令。除此之外还有一些花絮,比如不发出空的类构造函数。所有的小东西,只与更容易调试代码有关。给定默认/filealign
选项,生成的程序集不会更小的可能性很大。或者只是少了几千字节。
C# 编译器没有内置优化器,这不是它的工作。优化器内置于抖动中。由编译器发出的属性DebuggableAttribute.IsJITOptimizerEnabled属性控制。Debug 版本为true ,Release 版本为false。您可以使用 ildasm.exe 查看它的值
您会发现此答案中描述的抖动执行的优化类型。
于 2013-03-19T23:14:01.167 回答
1
除非您在代码中使用#if DEBUG 编译器指令,否则调试和发布可执行文件(dll、exe 等)是相同的。不同之处在于调试编译会生成包含调试信息的 .pdb 文件。
这个工具可以帮助你找出 dll 是 debug 还是 release:http ://assemblyinformation.codeplex.com
于 2013-03-19T21:11:59.580 回答