2013-01-06 37 views
10

是否有任何安全或性能問題與分配Debug VS的Release構建向公衆交代?調試VS版本中的.NET優化(關注發給用戶時)

大多數時候,我只包在Debug文件夾中的.exe文件(需要的依賴一起),並給它的用戶。

是否有任何理由更喜歡一個比另一個更分發?

+0

另請參閱[performance-differences-debug-and-release-builds?lq = 1](http://stackoverflow.com/questions/4043821/performance-differences-between-debug-and-release-builds 1) – nawfal

回答

8

我沒有想到的安全問題。確實存在性能問題,程序集的Debug版本包含一個屬性(DebuggableAttribute),它總是會阻止抖動優化器優化代碼。這對正在運行的程序的性能會產生很大的影響。由抖動執行的優化記錄在this answer中。

您可能會遇到內存消耗問題。垃圾收集器將以不同的方式運行,使局部變量保持活動直到方法體的結束。這是一個特例,假設你使用了真實的數據,應該在測試應用程序時診斷出這樣的問題。

具體到VB.NET,出貨調試版本可以很容易導致當用戶的計算機上沒有附加調試器中運行您的程序與一個OutOfMemoryException崩潰。它由於WeakReferences上的泄漏而失敗,Edit + Continue使用它來跟蹤帶有WithEvents關鍵字的事件處理程序的類。

如果你沒有需要通過抖動優化產生的PERF增強和不發貨VB.NET組件那麼就沒有什麼可擔心的。

9

是的,當然有 - 安全和性能的影響。

調試版本包含更多的信息比發佈版本和許多編譯器優化關閉調試版本。

另見Debug/Release difference這裏。


是否有任何理由,更喜歡一個比另一個更被分配?

是的。如果您想要使用優化編譯的更快的二進制文件,請使用release

+2

Hanselman得到這個錯誤(像往常一樣),默認的發佈版本實際上會生成調試符號。無論如何,這個問題與這個問題並不相關,它們不會影響任何東西,而你只是不運送pdbs。 –

+0

@HansPassant - 謝謝你。我認爲這些符號只在​​pdbs中,而且在帖子中有點奇怪。 – Oded

相關問題