Hej! Utan att svära på hur det fungerar då jag inte vet riktigt tror jag att det skapas ett nytt objekt per tråd som kör i IIS. Varje tråd tar hand om en, och enbart en, förfrågan åt gången. Därmed borde det inte vara problem med threadsafe, men om alla eventuella trådar i IIS måste komma åt data lagrad i objektet måste man nog spara det i en Application variabel. Static blir en instans för hela ASP.NET-applikationen. Hehe tackar för det, för att se till så att varje avändare endast har ett objekt av en klass bör man kanske kunna göra på följande vis(e testat)?: Nix, det fungerar inte. En statisk metod kan inte accessa en ej statisk medlemsvariabel utan att först skapa en instans av objektet.Singelton?
Hur fungerar igentligen ett singelton objekt i en webapplikation? Säg att vi har en klass enligt följande:
public class BusinessLogicalLayer
{
private static BusinessLogicalLayer instance;
public static BusinessLogicalLayer GetBusinessLogicalLayerInstance()
{
if (instance == null)
instance = new BusinessLogicalLayer();
return instance;
}
}
För att få en instans av klassen används GetBusinessLogicalLayerInstance. Frågan är nu om alla användare kommer jobba mot ett o samma objekt eller kommer det istället vara så att varje avändare får vars ett(1) objekt?
Mitt antagande är att alla kommer jobba mot samma objekt vilket kan skapa tråd problem(threadsafe) . Kanske man bör ta bort static från private static BusinessLogicalLayer instance;? då borde det väll bli ett objekt per användare?
Sv: Singelton?
Som sagt, ska inte svära på detta men det är vad jag tror. Någon annan som vet bättre?Sv:Singelton?
Dvs, alla användare skulle ha använt en och samma variabel.
Inte så bra i det här fallet.
I princip säger du EnableMultiThreading=False :)
Och det värsta av allt är att du märker antagligen prestandaförbättringar i utv.miljön,
men det kommer att sluta i katastrof vid 5-10 samtidiga användare.Sv: Singelton?
public class BusinessLogicalLayer
{
private BusinessLogicalLayer instance;
public static BusinessLogicalLayer GetBusinessLogicalLayerInstance()
{
if (instance == null)
instance = new BusinessLogicalLayer();
return instance;
}
}
Man tar helt enkelt bort static framför själva BusinessLogicalLayer objektet. Kan man ändå ha en statisk funktion som sätter en medlem som inte är statisk?
Sv:Singelton?
Kika annars på threadstatic, se http://msdn2.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx. Sätt det framför din instance-variabel så löser du i alla fall trådsäkerheten. Dock så kommer det att skapas en ny instans för varje tråd som körs och då är det ju inte längre en "riktig" singleton.
/Andreas