2014-03-05 23 views
4

在生產(發佈)版本中啓用靜態代碼分析時是否存在任何性能成本?任何不在生產版本中啓用CODE_ANALYSIS的理由?

我們的CI服務器在C#項目的調試版本上運行代碼分析,而發佈版本禁用靜態代碼分析(即未定義CODE_ANALYSIS)。如果沒有理由在生產版本上禁用代碼分析,那麼我會在調試版本上浪費時間。

反射器顯示SuppressMessage屬性被排除,如果代碼分析被禁用,但我不希望額外的屬性影響運行時性能。這是啓用靜態代碼分析(在Visual Studio 2013中)的唯一影響?

+0

我認爲你是從錯誤的角度看待這個問題。代碼分析可能會對未優化的IL(調試版本)產生比優化的IL(發佈版本)更好的結果。 – hvd

+1

當你已經足夠準備構建發佈版本並將其部署到生產環境中時,仍然需要修復代碼分析中的警告,這些警告很可能需要對代碼進行重要的代碼重構和重新測試,這是一種非生產性的方式去做吧。 Perf不是問題。 –

+0

@ hvd這是我原來的想法的一部分,但我找不到任何證據表明代碼分析在調試與發佈構建中給出了不同的結果。你可以嗎? –

回答

6

在啓用CODE_ANALYSIS編譯關鍵字,例如,當the compiler will remove all [SuppressMessage] attributes from the assembly when it is not enabled有實際差異(且因此可能引起消息顯示當你在命令行以後運行的FxCop,由於鎮壓已被刪除)。如果你正在內部系統上安裝你的二進制文件,那麼可以把壓制留在二進制文件中。一些公司希望他們從發佈給第三方的程序集中移除,因爲這些屬性(以及對稱屬性的內容)的存在可能會泄露敏感信息。

當在DEBUG構建運行代碼分析你可能會得到嚴格的結果,出現在大多數RELEASE構建可以導致迷路具體的FxCop規則一定的優化。優化可能會刪除私有方法(通過內聯),或者用常量替換對常量的調用,而不是定義常量。 FxCop不可能驗證這些項目,因爲它們已被刪除。這是可以預料的。

爲獲得最佳效果:在調試版本中運行代碼分析。要獲得最少信息披露,請從發佈版本中刪除CODE_ANALYSIS常量。

+0

關於未使用的代碼優化的好處。 –

相關問題