[英]Visual Studio C# Debug vs Release and Compilation debug=“false”
[英]Visual Studio - Debug vs Release
我在VS 2008中構建了一個針對.NET 2.0的Windows服務。我將其作為控制台應用程序運行以進行調試。
控制台應用程序運行良好。 我把它作為服務放在我的本地計算機上,在調試模式下編譯,仍然很好用。 我已准備好立即發布,突然,當我將其設置為發布模式時,服務會編譯並安裝,但沒有任何反應。 (根本沒有運行中的代碼)。
我意識到發布與調試模式是屬性配置設置,但似乎在發布模式下,即使我檢查定義DEBUG常量,取消選中Optimize代碼,並將Debug info設置為'full',它仍然無效。
將它設置回調試,它再次像魅力一樣工作。
(作為旁注,我嘗試將目標框架重置為3.5,以確保不是問題)
所以我的問題(按重要性排序)是這些:
將以任何方式使用我的“調試”版本會導致任何問題嗎?
除了我已經嘗試改變的三個設置之外,調試和發布之間的設置有何不同?
這對我來說似乎是一個奇怪的錯誤,並激起了我的好奇心。 知道是什么會導致這個嗎?
編輯:應該提一下,我已經在使用自定義安裝程序。 基本上我編譯程序(在調試或發布中),然后使用相應的安裝程序安裝它。
1)它可能,如果不是直接的,間接地通過使應用程序更慢並使其使用更多的內存。
2)當它在調試模式下運行時,某些東西的工作方式不同,例如:
代碼使用一些額外的NOP指令進行編譯,因此在每個代碼行的開頭至少有一條指令,這樣就可以在任何一行放置一個斷點。
指令可以在發布模式下重新排列,但不能在調試模式下重新排列,因此代碼可以單步執行,結果將對應於源代碼的確切順序。
垃圾收集器的工作方式不同,它允許引用在整個范圍內存活,而不是僅在它們被使用的時候存活,這樣變量可以在調試模式下查看,而不會在范圍結束之前消失。
異常包含更多信息,並且在拋出時需要花費更長的時間來處理。
所有這些差異都相對較小,但它們是實際差異,在某些情況下它們可能很重要。
如果您發現調試模式和發布模式之間的性能差異很大,通常是因為代碼存在問題,例如,如果它拋出並捕獲大量異常。 如果代碼中存在競爭條件,則可能僅在發布模式下發生,因為調試模式中存在一些額外開銷會導致代碼運行稍慢。
3)至於你的服務有什么問題,我不知道,但它似乎與在調試模式或發布模式下如何執行代碼無關。 代碼將在任何情況下啟動,如果它是代碼的問題,它將崩潰,您將能夠在事件日志中看到它。
我不確定我能說#1還是#2,但是當我遇到這樣的問題時,那是因為線程/並發性不正確 。 我不確定你的應用程序有多大,但這可能是一個很好的起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.