簡體   English   中英

Petapoco存儲庫模式存在重大性能問題

[英]Petapoco repository pattern significant performance issues

我們正在使用petapoco存儲庫模式(類似於此博客文章 )。 在頁面加載時,我們打開存儲庫,運行查詢,配置然后進行處理。 在淺色頁面上這很好,但是在頁面上多次發生這種情況時,性能會大大下降。

我可能錯誤地假設連接池可以解決此問題,該功能已啟用。

我進行了幾次測試。

該頁面所在的頁面(這是一個aspx頁面)目前需要大約1.2秒的時間來加載。 該頁面運行着大約30個數據庫查詢...,並查看分析器,正在對每個查詢進行登錄和注銷(即使使用連接池)。

如果我堅持連接並且直到頁面結束都沒有關閉,這會減少到70毫秒左右,這是一筆可觀的節省。

也許我們需要為請求保留數據庫對象,但是我不認為PetaPoco有這么多的開銷……特別是在連接池方面。

我創建了一個測試應用程序來演示它。

這表明,如果重新使用存儲庫,則加載1000次用戶需要230毫秒,而如果每次都重新創建存儲庫則需要3.5秒。

您對連接池的使用正在打破最佳實踐。

它說在每句話之后都無處可除。 我通常在進行處理時保持連接/存儲庫的狀態,並且僅在功能完成時(使用MVC)關閉它。

是的,即使連接池也有開銷,並且您似乎確實必須要進行演出。

我總是做的是為每個請求創建一個存儲庫實例。 因為我幾乎都是使用MVC模式進行開發的,所以這意味着我在每個控制器中創建了一個私有類級別的變量,並使用它來為Action方法中的所有請求提供服務。 轉換為WebForms(ASPX),這意味着我將在BeforeLoad(或PageLoad之前的任何事件)中創建一個,並根據需要傳遞它。 我認為保留類級實例對於Webforms來說不是一個好主意,但是我記不清足夠多的把握。

經驗法則是在整個請求中使用倉庫的一個實例(或者實際上是其他任何類型的類),通常是頁面加載或Ajax調用。 並且出於您已指出的原因。

請記住:互聯網上的信息是免費的,您將獲得所需的費用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM