2014-06-08 75 views
1

我正在嘗試創建一個asp.net mvc web應用程序,有些頁面需要在「實時」顯示數據,這個數據在sql server數據庫上,數據是總是改變 我在sql server中創建了一個存儲過程,我在我的控制器中使用實體框架linq將此過程調用並使用ajax發送結果到瀏覽器 我使用outputcashing最小化了存儲過程的執行次數 同一個控制器有多個方法使用相同的存儲過程,每個方法執行相同的過程, 如何改善我的應用程序的性能, 有沒有辦法對所有控制器執行一次存儲過程?Asp.net MVC實時應用程序性能

這是我控制我的目標是,如果你的服務器的Web場(多臺服務器),那麼你可以緩存在Asp.net緩存中的數據是不是儘量少用數據庫

[OutputCache(Duration = 20, VaryByParam = "*")] 
public class JobsETLController : Controller 
{ 

    private ETL_REP_MAUIEntities db = new ETL_REP_MAUIEntities(); 
    public ObjectResult<BIOGetETLJobs_Result> ETLJobs; 

    public JobsETLController() 
    { 


     ETLJobs =db.BIOGetETLJobs(); 


    } 

    public ActionResult Indexp() 
    { 

     var y = from xx in ETLJobs 
      where xx.etat!="Completed" 
      orderby xx.etat ascending 
       select xx; 
     return PartialView(y); 
} 



    public ActionResult IndexpAll() 
    { 

     var y = from xx in ETLJobs 
        where xx.etat == "Completed" 
       select xx; 
     return PartialView(y); 
    } 
+0

我的應用程序檢測到數據庫中某些表的更改並通知用戶,這些表的內容在不斷變化 – user3489866

+1

而不是使用輪詢,請考慮使用類似websockets的「推送」模型可以爲您提供的。你的應用程序可以設置一個SqlDependency。只要您正在監控的數據庫查詢發生變化,就會通知您的應用程序,並且您可以使用SignalR通知您的客戶... http://techbrij.com/database-change-notifications-asp-net-signalr- sqldependency –

+0

謝謝,我只需要每5分鐘更新一次數據,所以它不是真正的實時,但問題是同一個控制器多次使用存儲過程, – user3489866

回答

1

的(這不是輸出緩存,而是數據緩存)。您只需在數據到期時設置一個5分鐘的時間限制(您說數據需要每5分鐘更新一次),這樣當控制器需要數據時,它首先檢查緩存,如果不存在,它將執行存儲過程。

MyData items; 

items = (MyData)Cache["MyData"]; 
if(items == null) 
{ 
    items = DoQueryToReturnItems(); 
    Cache.Add("MyData", items, null, DateTime.Now.AddMinutes(5), ..); 
} 

它甚至可以設置要依賴於的SqlDependency這樣,當數據發生變化時,高速緩存可以更新緩存項。

+0

謝謝,這正是我想要的,但我沒有理解你的例子,你能告訴我如何緩存ETLJobs = db.BIOGetETLJobs();在上面的例子中? – user3489866

+0

@ user3489866 - 我真的不確定它是如何更清晰的,我給了你一個例子。你將不得不弄清其餘的值,因爲只有你知道他們應該是什麼。用您自己的數據替換MyData –