Om man skall göra en sida med många beräkningar och databasanrop skulle man då rent hypotetiskt vill säga, kunna lägga in en timer eller en sleep-funktion för att fördela/sprida ut belastningen. Eller tänker jag helt fel då?
Alltså jag har ingen exempelkod men jag tänker mig något liknande.
* Exekvera en massa ifrån en databas
* Utför komplicerade beräkningar
* Skicka ut en massa mail
[blue]* Vila lite :D[/blue]
* Börja om från början
Det är såklart inte sidan utan servern som skall få vila.
Men det kanske inte funkar på det viset. Vet inte hur servern belastas när en sida exekveras. Kan ju logga lite själv.
BC30518: Overload resolution failed because no accessible 'New' can be called with these arguments:
Public Sub Dostuff_Thread()
Dim NewThread As Thread = New Thread(AddressOf Do_stuff)
NewThread.Priority = ThreadPriority.Lowest
NewThread.Start()
End Sub
Ok, jag märkte att när jag tex försöker sätta in ett värde i en session så ballar det hela ur.
Vad som händer har jag ingen aning om.
Dum fråga: hur startar/hittar jag loggboken?
Att pyssla med sessioner i en tråd låter som ett konstigt tillvägagångssätt. Tilldela en property session-värdet på klassen "foo" och tråda sedan subben "bar" i klassen som tar emot session-värdet som en privat medlemsvariabel.
God morgon. *gäsp*
Det är möjligt, men enligt artikeln: http://www.sitepoint.com/print/threading-asp-net
så gör han det. Jag har ingen aning om det är bra eller dåligt.
För mig så funkar det inte när jag föröker att skicka några mail i samband med loopen.
Får inget felmeddelande i loggen heller.
Istället för att använda just "Thread" så finns ju även Asynkrona anrop (med Delegater) som också körs på en ny tråd. Här kan man dock skicka med parametrar, samt så har man möjligheten att få en Callback när metoden är klar, något som du kanske kan utnyttja.
Istället för en "Sleep" som jag inte tror att du kan använda där, så kan du göra en "Wait" på ett annat anrop som i sig utnyttjar "Sleep".
Blev kanske lite flummit svar, men hoppas du förstår! :)
* Exekvera en massa ifrån en databas
* Utför komplicerade beräkningar
* Skicka ut en massa mail
* Vila lite
* Börja om från början
Och detta säger dig att du INTE skall använda dig av en ASPX-sida. Det du eftersträvar är verkligen inte det som ASP.NET är tillför och du kommer få en krystad och dålig lösning.
Den bästa lösningen är en lite applikation som du schemalägger med ett visst intervall. Om intervallet är väldigt litet så kan man istället skriva en windows-service som ligger med en timer och aktiveras då och då.
Angående trådarna så kan man faktiskt fånga fel från olika trådar till sin maintråd. Kommer inte ihåg koden exakt, har den på jobbet, men det är något med ApplicationOnHandlingException eller nått tror jag.
Det bästa alternativet är ju att se till så att man i sina trådar har try-catch runt all sin kod och loggar ner eventuella fel till en logg som man kan läsa av.
Så fort man börjar med trådar så måste man tänka noga på hur man skriver sin kod, eftersom det helt plötsligt kan vara flerar trådar som försöker läsa/skriva till samma data, och detta kommer att generera fel som är väldigt svåra att hitta.
Generellt kan man säga att vid trådprogrammering så skall man inte använda några "global" variabler i sina klasser, alltså man skall endast ha variabler i sina funktioner då dessa körs i egna minnesrymder för varje tråd. Och om man har en "global klass" variable så skall man göra en lock() varje gång som man önskar läsa/skriva till/från dessa variabler.
Ok, jag vet att man skulle kunna tänka sig en schemalagd aktivetet som man lägger som en service, men.
Detta kräver en dedicerad server eller att man känner sin ISP.
Detta kostar ju.
Jag har kommit ut ur garderoben (med servern ;))