2011-02-22 25 views
0

在我的代碼中,我有一個下拉選擇,並且從下拉列表中選擇代碼執行進一步處理並生成報告/數據。需要關於C#編碼的建議(效率)

此外,整個程序取決於是從3個不同的操作

Operation1: processing a text files of size of size > 6MB 

Operation2: SQL Query to a DB (Query takes around 1 minute) 

Operation 3: HTTP POST request to server (The main costliest part of the programe) 

所以收集的數據,使之有效,我想只有一次執行此操作並使用數據的所有不同的選擇從下拉菜單。

問題是我怎麼可以這樣做如下:

  1. 我不能把它「的Page_Load」事件,因爲每次頁面加載操作將開展

  2. 我可以」把它放在「dropdownlist_selectedindexchanged」事件裏面,因爲它會和#1一樣。

  3. 我想在 「Page_Load中」 做如下


void Page_Load(object sender, EventArgs e) 
{ 
    if(!ispostback) 
    { 
     Operation1(); 
     Operation2(); 
     Operation3(); 
    } 
} 

這是罰款的;這些操作只能執行一次,我可以在整個過程中使用這些數據,但隨着操作需要時間,我的頁面將需要一段時間才能加載。

有沒有其他方法可以達到我想要的效果?請告訴我。

感謝, 拉胡爾

回答

1

如果數據集都不會改變,你也許可以同時管理Application_Start()做一次。

編輯 - 這樣的事情(從內存打字和VS遠點,我VB):

Protected void page_load(object sender, eventargs e) 
{ 
    // the name can be anything 
    if (!System.Web.HttpContext.Current.Session["data_cache_filled"]) 
    { 
     // code to fill the cache. 
     // ... 

     //mark it as filled 
     System.Web.HttpContext.Current.Session["data_cache_filled"] = "yes"; 
    } 

} 
+0

@Rodrigo,糾正我,如果我錯了,但我認爲把它在的Application_Start()會影響整個aplication ......也就是說,如果執行3個操作需要3分鐘(如此),然後應用程序將需要3分鐘加載。謝謝 – Rahul 2011-02-22 18:59:58

1

緩存它。使用from hereCacheHelper類,你可以這樣做:

internal List<Employee> Operation1() 
{ 
    List<Employee> employeeData; 

    if (!CacheHelper.Get("employeeData", out employeeData)) 
    { 
    employeeData = (from x in db.Employees select x).ToList(); // or whatever 

    CacheHelper.Add(employeeData, "employeeData"); 
    } 

    return employeeData; 
}