2009-09-14 53 views
8

我目前正在使用一個ASP.NET CMS,它可以在App_Code目錄中保存近500個代碼文件,以及數百個帶有代碼隱藏在網站各種文件夾中的Web表單。這是一個網站項目(不是一個Web應用程序項目),我不願意改變它,因爲這是一個涉及多個開發人員的項目,此外,這也是CMS的出貨方式。優化ASP.NET網站項目的構建性能?

我正在尋找提示和技巧來優化此網站項目的構建過程,因爲Visual Studio經常要重建所有源文件和代碼隱藏文件,這可能需要幾分鐘的時間。

是否有避免重建所有文件的方法?我應該提出將我們的代碼和CMS代碼分離爲單獨的Web應用程序項目(而不是網站項目)的觀點嗎?有沒有其他方法可以提高構建性能?

+1

無論如何,這是CMS Sitefinity嗎? – 2009-09-16 05:04:04

+0

哈哈不,這是一個鮮爲人知的稱爲Litium的CMS。但現在我知道另一個CMS,以避免... =) – Blixt 2009-09-16 06:31:17

+1

哦,不,Sitefinity是好的,但它絕對患有相同的症狀。它讓我感到它也是一個網站,而不是一個Web應用程序項目。 – 2009-09-17 00:48:57

回答

13

如果最簡單的解決方案是patch-wise,以儘可能保持.cs結構相似,那麼我會按照Andreas的建議將App_Code移到至少1個其他項目中。

Scott Guthrie posted a few tips在VS 2005中編譯出來之後,你沒有指定你在哪個版本,但是同樣的速度提示也適用。他的文章的第二部分專門針對網站項目。

另一個小竅門是如果你在頁面上工作而不是代碼實際上在App_Code目錄there is a build option that may be useful。轉到項目屬性>構建>更改從構建Web站點運行啓動頁面構建頁面之前,當你火起來的調試器,這將只建啓動頁面。我不確定這種情況是否經常發生,但如果您的大部分工作都發生在頁面中,而不是在App_Code中,這將爲您節省大量編譯時間。

App_Code必須一起構建,您應該避免讓代碼隱藏等。所有可以在其他地方應該是。請注意:至少在調試時,編譯時間通常比Web應用程序快30-50倍。話雖如此,你必須在每次代碼更改時重新編譯整個應用程序,所以存在缺陷......但是由於命名空間的變化等原因,我明白補丁會對你有所幫助。另外,請記住,將代碼拆分爲其他項目時,除了在編譯方面更簡單全面之外,Visual Studio不需要編譯這些其他依賴項目,除非它們已更改。就目前來看,一切都是公平的遊戲,因爲項目中任何可以改變的東西都可能影響其他任何東西......但是如果將它分開,Visual Studio只會在您更改項目或項目時編譯其他項目他們參考得到重建。

3

您至少應該嘗試將其轉換爲Web應用程序,除非出於某種政治原因不這樣做。它不像聽起來那麼難,最大的問題是所有的開發人員可能不得不重新配置他們的解決方案。

嘗試將App_Code中的代碼移動到不同的項目,因爲它們並不需要在網站中。至少應該有一點幫助。

+1

我擔心的是,更改項目結構使得從CMS開發人員應用補丁程序變得更加困難,並且還會使獲得支持變得更加困難(因爲我們不使用「官方」配置。) – Blixt 2009-09-14 11:08:22

+1

我同意@Blixt。雖然將網站轉換爲Web應用程序並不困難,但您會將自己鎖定在比較簡單的CMS供應商升級和補丁程序之外。 – 2009-09-17 00:45:11

0

我認爲你最大的問題將是大量的文件。我會將網絡應用分成多個(至少2個)項目:您的Web項目和業務層(或其他類型的項目)。

我最好的應用程序代碼中的大部分文件都是很少更改的實體或文件,因此在您的情況下,將它們保留在您的Web應用程序中並不合理。

如果您決定在您對其他項目中的某個文件進行更改時決定採用此方法,則在部署更改時必須非常小心,因爲您必須部署整個dll。

4

你應該嘗試一下我們最近添加的新的OptimizeCompilation標誌。

<compilation optimizeCompilations="true"> 

請看看我的blog post學習討論什麼內容,以及在哪裏得到它。除非你使用Win7或者使用VS2010,否則你需要通過hotfix來獲取它。

+0

當你更改App_Code中的文件然後請求頁面時,你應該看到改進,因爲App_Code將被重新編譯,而頁面不會。請注意,這適用於運行時行爲,這與VS內發生的編譯行爲不同。 – 2009-09-23 19:36:16

+0

關於什麼的_compilation調試= 「假」 targetFramework = 「4.5.1」 defaultLanguage = 「C#」 optimizeCompilations = 「真」 一批= 「真」 maxBatchGeneratedFileSize = 「2147483647」 maxBatchSize = 「2147483647」 numRecompilesBeforeAppRestart = 「2147483647_? – Kiquenet 2015-07-09 07:46:21

0

我們遇到了與我們的項目類似的問題,該項目採用這種方式可以熱添加新的白標籤合作伙伴網站。

我們發現加快構建時間的最簡單方法是減少Visual Studio掛起的IO瓶頸。獲得體面的SSD(我們使用OCZ 60gb Summit驅動器),您應該發現構建時間大大提高。

另一個節約時間是減少項目的目錄總數。對於Visual Studio遇到的每個新目錄,都會啓動編譯器的新實例。在同一目錄中儘可能多的文件可以降低成本。 (要獲得使項目可維護的文件夾結構,請使用虛擬文件夾)