调试与发布
我在VS 2008中构建了一个针对.NET 2.0的Windows服务。我将它作为控制台应用程序运行以进行调试。
控制台应用程序运行良好。 我把它放在我的本地计算机上作为服务,在调试模式下编译,仍然工作得很好。 我准备立即发布,并且突然,当我将其设置为发布模式时,该服务编译并安装,但没有任何反应。 (根本没有服务代码正在运行)。
我意识到释放VS调试模式属性配置设置,但似乎在发布模式下,即使当我检查定义DEBUG常量,取消选中优化代码,并将调试信息设置为'完整'时,它仍然无所作为。
将其重新设置为调试,并再次像魅力一样工作。
(作为旁注,我尝试将目标框架重置为3.5以确保这不是问题)
所以我的问题(按重要性顺序)是这些:
将以任何方式使用我的“调试”版本会导致任何问题?
除了我已经试图更改的三个版本之外,调试和发布之间的哪些设置有所不同?
这对我来说似乎是一个奇怪的错误,并激起了我的好奇心。 任何想法会导致这种情况?
编辑:应该提及,我已经在使用自定义安装程序。 基本上我编译程序(无论是调试还是发行版),然后使用相应的安装程序进行安装。
1)它可能(如果不是直接的话)间接地通过使应用程序变得更慢并使其使用更多的内存。
2)当它以调试模式运行时,某些事情的工作方式不同,例如:
代码是用一些额外的NOP指令编译的,因此每个代码行的开始处至少有一条指令,这样就可以在任何一行中放置一个中断点。
这些指令可以在发布模式下重新排列,但不能在调试模式下重新排列,以便代码可以单步执行,结果将与源代码的确切顺序相对应。
垃圾收集器的工作原理是不同的,通过让引用在整个范围内生存,而不仅仅是在它们被使用的时候,以便变量可以在调试模式下查看而不会在范围结束之前离开。
异常包含更多信息,并且在抛出时需要很长时间才能处理。
所有这些差异都是相对较小的,但它们是实际差异,在某些情况下它们可能很重要。
如果您发现调试模式和发布模式在性能上存在很大差异,通常是因为代码有问题,例如,如果它正在抛出并捕获大量异常。 如果代码中存在争用条件,它可能只会在释放模式下发生,因为在调试模式下会有一些额外开销,导致代码运行速度稍慢。
3)至于你的服务的问题是什么,我不知道,但它似乎并没有涉及代码如何在调试模式或释放模式下执行。 代码会在任何情况下启动,如果代码出现问题,它将会崩溃,您可以在事件日志中看到它。
我不确定我能否与#1或#2交谈,但是当我遇到这样的问题时,这是因为线程/并发性不正确 。 我不确定您的应用有多大,但这可能是一个很好的开始。
链接地址: http://www.djcxy.com/p/27957.html上一篇: Debug vs Release