Avatar billede noem Nybegynder
21. oktober 2009 - 09:47 Der er 6 kommentarer og
1 løsning

BackgroundWorker i ASP.NET

Hej

Jeg skal have lavet en ASP.NET rapport som henter data i et meget langsomt system.

For at optimere performence på dette, kunne jeg godt tænke mig at starte en tråd/backgroundworker op  som cyklisk står og opdatere en statisk object som jeg kan hente data fra på Page_Load eventet..

Er dette muligt i ASP.Net ?
Avatar billede noem Nybegynder
21. oktober 2009 - 10:13 #1
Måske kan jeg spefificere lidt mere.

Ville nedenstående kode være en god måde at løse dette på (og ville det overhoved virke) ?

Dette er min første Asp.Net rapport, er har ikke helt styr på scopes endnu.

namespace WebReports
{
    public class FixBusinessLogic
    {
        private static Thread backgroundWorker;

        private static string text = "not started";

        static FixBusinessLogic()
        {
            backgroundWorker = new Thread(new ThreadStart(FixBusinessLogic.KeepDataInsync));
        }

        private static void KeepDataInsync()
        {
            lock (text)
            {
                text = "Started " + DateTime.Now;
            }
        }

        public string Text { get { lock (text) { return text; } } }
    }
}
Avatar billede noem Nybegynder
21. oktober 2009 - 10:20 #2
Hov ovenstående kode mangler selvfølgeligt en løkke i KeepDataInsync metoden
Avatar billede arne_v Ekspert
21. oktober 2009 - 23:43 #3
Du kan godt starte en tråd og lade den gøre noget og lade client polle for resultat.

Men:
- ASP.NET's tråd håndtering bliver suboptimal, da du starter tråde bag om ryggen på den
- hvis web app genstartes så ender tingene i et rod

Hvis det er en inhouse løsning vil jeg mene at "start" request skal smide noget i en message queue, du skal have en Windows service som processer requests i message queue og gør svar tilgængelige et sted (fil/database/message queue) som "poll" requests kan checke.

Hvis det er et web hotel har du nok ikke andre muligheder end en tråd løsning.
Avatar billede noem Nybegynder
22. oktober 2009 - 18:13 #4
Hej Arne

Tak for svaret.

Jeg havde faktisk overvejet muligheden at lave en Windows Service som kunne kommunikere med asp.net via noget WCF, men jeg droppede idéen fordi jeg ville holde koden så simpel som muligt (kan godt lyde som lidt "overkill" for kunden at jeg skal bruge en Windows service for at lave en simpel rapport).

Men måske der er det den eneste vej frem hvis det skal være noget nogenlunde stabil kode.
Avatar billede arne_v Ekspert
22. oktober 2009 - 20:30 #5
Det vigtige ved message queue er dens asynkrone natur.

Hvis rapporten kunne genereres hurtigere, så var der ikke noget problem. Men nu er det et problem og det skal løses.
Avatar billede noem Nybegynder
26. oktober 2009 - 07:42 #6
Hej Arne

Kan du ikke smide et svar.
Avatar billede arne_v Ekspert
26. oktober 2009 - 12:39 #7
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester