代碼合約使用太多會減慢編譯過程。 其次代碼合同是調試模式的一部分,只有當我設置代碼合同並始終在發佈模式下編譯代碼時,代碼合同纔會工作?我想它不會這意味着開發人員將被迫在調試模式下工作,並且當您創建設置時,將其設置爲釋放模式。我對嗎?從MS Devlab代碼合同和編譯
Q
代碼合同和編譯
2
A
回答
0
4
由於CodeContracts的工作方式,編譯速度有所減慢。有一個IL重寫器,它根據您指定的合約將代碼注入您的方法。這發生在C#編譯器出現併爲您的程序集生成IL之後。
運行時性能差異非常小,不會以明顯的方式影響您的代碼。除非你正在開發一些實時股票交易系統,否則我真的不會擔心它。
就禁用生產中的代碼合同而言,我寧願有代碼合同的附加保護,以避免錯誤。代碼合同中的一個錯誤會告訴你究竟違反合同的地點和原因,而不是因爲某些不良數據在調用堆棧樹上傳入5個級別而不得不深入一些深層調用堆棧。
如果您正在使用或正在計劃使用Contract.Requires<TException>
並且未啓用'運行時合同檢查',那麼IL重寫程序需要綁定到代碼合同的使用時會出現運行時失敗。然後您將被要求啓用運行時合同檢查以使其發揮作用。
恕我直言,使用Contract.Requires<TException>()
比Contract.Requires()
更有用,因爲您可以控制拋出的異常類型。
編輯:我忘了添加的一件事是IL重寫器完全獨立於C#編譯器,並且兩者之間沒有依賴關係。
相關問題
- 1. 代碼合同和以編程方式編譯項目
- 2. Java代碼和JIT編譯
- 3. JS編譯器同時編寫前端和後端代碼
- 4. C#代碼合同編譯時間 - 我該如何改進它?
- 5. 代碼合同編譯器如何認爲這可能爲空?
- 6. 代碼合同和異步
- 7. Pex和代碼合同
- 8. Moq和代碼合同
- 9. GMP-彙編代碼?編譯代碼
- 10. 編譯Yacc代碼
- 11. C代碼編譯
- 12. 編譯vhdl代碼
- 13. 編譯C代碼
- 14. 代碼不編譯
- 15. 反編譯彙編代碼
- 16. 包含編譯代碼和解釋代碼的「混合」Python模塊的示例?
- 17. 用/ MT編譯的混合代碼和/ MD
- 18. 如何編譯混合的C和C++代碼?
- 19. C++和cublas代碼的混合不編譯
- 20. 用C++編譯器編譯c代碼
- 21. 編譯錯誤的代碼的編譯
- 22. 反編譯預編譯源代碼ASP.NET
- 23. 在ubuntu中編譯/編譯源代碼
- 24. 貨物編碼相同的代碼:虛假編譯時錯誤?
- 25. 合同異步和同步代碼
- 26. dotnet dll反編譯和更改代碼
- 27. 安裝OpenGL ES和編譯代碼Android
- 28. erlang-如何編譯和代碼
- 29. Haxe編譯爲C++和JS源代碼
- 30. 用caffe和Eigen編譯C++代碼
微軟的.Net代碼合同? – 2011-05-27 18:32:43
是的,請標記語言和/或平臺。 – 2011-05-28 20:24:34
@ Ken,Henk:[code-contracts]標籤專門用於微軟的Code Contracts項目。 – porges 2011-05-30 07:11:48