2011-12-16 74 views
1

對BLL/DAL使用模塊或共享/靜態引用可以提高ASP.NET網站的性能嗎?可以通過模塊/靜態類來提高ASP.NET性能嗎?

我工作的網站由兩個項目組成,一個是網站,另一個是作爲DAL和BLL組合的VB.NET類庫。

該庫用於與數據庫進行通信,有時還會轉換/驗證進入/來自數據庫的數據。
當前網站上需要db訪問(絕大多數)的每個頁面將在庫中創建相關類的實例以訪問特定的表。

據我所知,這導致了庫中的類被實例化併爲每個請求進行垃圾收集,如果多個用戶查看同一頁面,可能會有多個併發實例。

如果我將這些類轉換爲模塊(共享/靜態類),性能會增加並且內存被保存,因爲每次只存在一個模塊的一個實例,並且不必爲每個請求創建一個新實例?
(如果是這樣,沒有人知道是否有TableAdapter的作爲模塊的全局變量會導致由於線程問題?)

或者會使得引用到圖書館類是ASP.NET頁面有同樣的效果? (除了我將不得不重寫很多)

回答

0

我不是專家,但認爲這種靜態類/會話對象模型在書籍和在線的例子的缺失是指示它是壞想法

我繼承了一個Linq-To-Sql應用程序,其中數據庫上下文是靜態的,並且在請求整個事情崩潰之後。 L2Sql的標準模型是工作單元模式(定義一個任務或一組任務 - 執行它們並關閉)。讓框架擔心連接池和高效的GC。

你只是想提高效率還是你有性能問題?如果是後者,查看緩存或提高查詢效率(使用存儲過程,循環查找查詢)比查看對象實例更有效。

靜力學在單元測試中表現不佳(另一個原因是他們已經退出了時尚界)。

+0

我一直在尋求提高網站效率,現在我會尋找一種不同的方式來做到這一點。感謝您的幫助 – wjamie2340 2011-12-16 13:28:09

0

實例如果它們沒有被CG收集(內存泄漏),它們只是一個問題。實例比靜態更靈活,因爲您可以將實例配置爲您正在使用的特定上下文。

當應用程序具有性能差或記憶問題的通常是一個跡象,表明

  1. 實例不正確釋放(IDisposable接口)
  2. 檢索的數據量太大(不分頁的大型數據集)
  3. 執行大量的查詢(選擇N + 1,或者只是有大量的查詢)
  4. 製作粗糙的SQL語句(缺少索引,FK,太多的連接等)
  5. 太多的遠程調用(對其他服務器或磁盤)

這些是我會檢查的第一件事。然後開始查看實例化對象的數量。有可能糾正上述列表將解決大多數性能瓶頸。

+0

會做,感謝您的幫助 – wjamie2340 2011-12-16 13:29:11

0

可以使用BLL/DAL的模塊或共享/靜態引用提高 ASP.NET網站的性能?

這是可能的,但它很大程度上取決於您如何使用您的數據。在使用一個對象的單個共享實例而不是每個請求一個代價的折衷方案中,您將需要應用鎖定,除非對象是嚴格只讀的,並且鎖定既可以減慢速度,又可以使代碼複雜化(更不用說是常見的錯誤來源)。

但是,如果每個對象都要包含完全相同的數據,那麼折衷可能是值得的 - 如果它可以節省數據庫往返,則更是如此。

雖然您可能會考慮使用單個或少量的參數化對象而不是靜態,並使用緩存來管理它們。這樣可以讓您靈活地放棄不再需要的對象,在處理靜態對象時很難做到這一點。

+0

感謝您的幫助。我想,即使我已經得到它的工作,它將是相同數量的DB旅行,從較少的對象調用,它的Db旅行將是最多的時間/資源消耗 – wjamie2340 2011-12-16 13:49:05

相關問題