2013-04-17 28 views
2

我們有一箇中等尺寸的VisualStudio解決方案,其中包含60個項目。每個項目都包含代碼合同。由於我們使用Contract.Requires<T>作爲前提條件,我們需要在編譯後重新編寫我們的程序集。如何提高VS2012中CodeContract重寫器的性能?

組裝模式是'標準合同要求',運行時檢查設置爲'滿',我們有'設置合同失敗聲明'。合同參考彙編設置爲「Build」。

從VS2010更改爲VS2012(VS2010在安裝之前卸載)後,我們的解決方案將構建在1m 30s。安裝CodeContracts安裝包後,編譯時間增加到5分30秒(因爲二進制重寫器現在正在重寫程序集)。

這比在VS2010中構建解決方案花費的時間要長得多,因爲在VS2010中需要花費大約3米來完成重建。

有沒有人遇到類似的放緩或有一個想法如何改善情況?

我們已經嘗試禁用合約參考組件的構建,但是這並沒有改變任何東西。

+0

我的一位同事在我們的解決方案中使用VS2012,它有代碼合同,他沒有看到這個(儘管我們只有大約5個項目)。我不知道它是否與此[論壇帖子]相關(http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/d5a61334-9404-4a43-9836-294e71196c62)。 – Mightymuke

回答

0

我們有超過90個項目在其中大部分運行重寫器的解決方案。在HP z420上,通過並行構建,我可以在大約1分40秒內構建解決方案。重寫器確實會爲每個項目添加2-10秒,具體取決於要被重寫的dll的大小。這是最新的1.5.60409.11版本。

+0

我在CodeContract論壇發佈的一個建議是設置可執行文件上的32位req位以在32位模式下運行CLR。在64位機器上,這可以減少幾秒鐘。 http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/ff115adb-d2ed-4aaf-8889-3b8732517fdb –

0

我注意到靜態檢查程序嚴重下滑,不知道這是否適用於此。我不積極,但我認爲他們最近改變了緩存的工作方式。我認爲它默認使用基於文件的緩存,但不再具有該選項。在項目的CC設置中,可以選擇指定用於緩存的SQL實例。我花了一段時間才弄清楚,但我在我的機器上使用了SQL Express實例。我檢查了「緩存結果」並將「SQL Server」設置爲.\SQLEXPRESS。當這些工具運行時,當它不工作時,應該在輸出窗口中看到關於緩存的消息。

0

當我開始一個新的解決方案,我做的第一件事是創建一個新的解決方案配置:

  1. 調試
  2. 調試CC
  3. 發佈

我然後只啓用代碼調試CC上的合同。這使我可以在調試模式下快速編譯,並在接近提交時切換到代碼合同構建。