2011-02-22 2 views
0

Dans mon code, j'ai une liste déroulante et lors de la sélection de la liste déroulante, le code effectue un traitement supplémentaire et génère des rapports/données.besoin de suggestion sur le codage C# (efficacité)

En outre, l'ensemble du programme dépend des données qui sont recueillies de 3 opération différente

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) 

Donc, pour le rendre efficace je pense pour effectuer cette opération qu'une seule fois et utiliser les données pour tous les différents choix à partir de la liste déroulante.

La question est comment puis-je faire comme ci-dessous:

  1. Je ne peux pas le mettre dans l'événement « page_load » parce que chaque page de temps charge les opérations exécuteront

  2. je peux » t le mettre à l'intérieur de l'événement "dropdownlist_selectedindexchanged" car il sera le même que # 1.

  3. Je pensais que de le faire dans "page_load" comme ci-dessous


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

C'est très bien; les opérations ne sont exécutées qu'une seule fois et je peux utiliser les données tout au long, mais ma page prendra du temps à charger car les opérations prennent du temps.

Y at-il un autre moyen de réaliser ce que je veux? S'il vous plaît, faites-moi savoir.

Merci, Rahul

Répondre

1

Si l'ensemble de données ne changera pas, vous pourriez probablement réussi à le faire une fois à Application_Start().

Edit - quelque chose comme ça (en tapant de la mémoire et loin de VS, je fais 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, corrigez-moi si je me trompe, mais je pense le mettre dans Application_Start() aura une incidence sur l'ensemble ... aplication signifie que si l'exécution des opérations 3 prend 3 minutes (dites-le), puis l'application prendra 3 minutes à charger. Merci – Rahul

+0

Oui, il faudrait 3 minutes pour commencer, juste une fois. Bien sûr, vous devriez alors mettre en cache les résultats, vous n'avez donc pas besoin de les charger à nouveau (une seule fois par HttpApplication); –

+0

@Rodrigo, Merci beaucoup pour votre réponse et c'est génial ... semble être ce que je cherchais mais je vois un inconvénient aussi ... à partir du lien MSDN http://msdn.microsoft.com/fr-fr /library/ms178473.aspx J'ai trouvé que "Application_Start()" se déclenchera une seule fois quand la première ressource est demandée au serveur ... ce qui apporte aussi le point que ... même si quelqu'un n'essaie pas vraiment de visiter ma page. .. cette opération sera effectuée inutilement (ma page est une petite partie de l'application web complète où je vais le brancher). – Rahul

1

en cache. Utilisation de la classe CacheHelperfrom here, vous pouvez faire:

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; 
} 
Questions connexes