2010-08-25 74 views
1

我該怎麼做才能避免每次在ASP.NET MVC2中加載頁面時重複加載靜態數據?這很浪費,我想解決它。ASP.NET MVC 2 - 避免重複查詢數據庫中的靜態數據?

我的主頁在右上角顯示了典型的用戶名+公司名稱。但是由於MVC的無狀態特性,每次加載頁面時都必須查看這些數據,即使它永遠不會改變。

在舊的webforms天,我只是把它扔進會議,但似乎在MVC勸阻。另外Web應用程序運行在一個webfarm上,所以我真的不想使用會話。

網絡應用程序已經有相當多的靜態數據項在每個頁面加載時被查詢(用戶貨幣,用戶稅率等),所以我認爲只有在登錄時加載一次才能獲得性能提升。我只是不確定什麼是正確的MVC方法(我對MVC還是比較新的)。

+0

看看在.NET中使用ProfileProvider。對於這些情況非常有用,可以創建自己的配置文件提供程序來實現現有的表/列,然後從那裏開始。 – Tommy 2010-08-25 10:49:56

+0

每次加載配置文件對象時,Profile都會調用數據庫嗎?如果是這樣,它不會改變任何東西。 – 2010-08-25 11:13:14

+0

在MVC中使用(而不是* mis * -using)'Session'沒有任何問題。這是一個瀏覽器實例特定的緩存。當你需要時,使用它。不要在那裏放置任何與安全有關的東西,也不要認爲它與登錄相關。 – 2010-08-25 13:01:50

回答

3

我總是爲此使用內置的ASP.NET緩存,適當地設置到期日期,並且您很好。

public void Blah() 
{ 
    var company = HttpRuntime.Cache.Get("Company") as string; 
    if (company == null) 
    { 
     company = FetchCompanyFromDb(); 
     HttpRuntime.Cache["Company"] = company; 
    } 

    return this.View(company); 
} 

也看到前面的問題:

Caching in asp.net-mvc

+0

在Web場景中工作的效果如何?我猜這是緩存在內存中?因此,如果用戶從一個網絡盒子被推到另一個網絡盒子,緩存將會消失? – 2010-08-25 11:12:17

+0

默認緩存在內存中是。通常每臺計算機請求一次信息並不是那麼糟糕 - 它的查詢數量仍然遠遠少於以前。 但是,假設這很難計算信息,所以請求需要很長時間。然後,您可以查看分佈式緩存的Velocity或Memcached。這些都可以在ASP.NET MVC中使用,並允許您共享緩存,但訪問速度比內存緩存要慢。 – 2010-08-25 11:23:06

0

你能也許封裝您的用戶的貨幣/用戶名/稅務等爲用戶控件,然後使用輸出緩存上呢?

+0

數據也需要在控制器中可用,所以這種方式可能不會工作。 – 2010-08-25 11:14:31