нужно предложение по кодированию на C # (эффективность) - PullRequest
0 голосов
/ 22 февраля 2011

В моем коде у меня есть выпадающий список, и после выбора из выпадающего списка код выполняет дальнейшую обработку и генерирует отчет / данные.

Далее, вся программа зависит от данных, которые собираются из 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();
    }
}

Это хорошо; операции выполняются только один раз, и я могу использовать данные повсеместно, но тогда моей странице потребуется время для загрузки, поскольку операции требуют времени.

Есть ли другой способ добиться того, чего я хочу? Пожалуйста, дайте мне знать.

Спасибо, Рахул

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Кэшируйте это.Используя CacheHelper класс отсюда , вы можете сделать:

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;
}
1 голос
/ 22 февраля 2011

Если набор данных не изменится, вам, вероятно, удастся сделать это один раз в 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";
    }

}
...