05. februar 2008 - 17:56Der er
11 kommentarer og 1 løsning
C# Static class
Hej
Jeg tænkte på om jeg har forstået brugen af static rigtig. Hvis man bruger static er den kun representeret i hukommelsen en gang, er det også på tværs af brugere? Jeg har forstået det er pr bruger/application men er ikke sikker.
Og på samme med måde, hvis jeg laver en webservice og bruger static på nogle værdier, er det så også pr bruger/application eller vil en static definered string være den samme string pr kryds af forskellige brugere?
Er snak om en web app pt, "en for hver web app der bruger den" bare for at være sikker, så skal det forståes som at den er unique for hver bruger der besøger siden? samme for en webservices. Ikke noget med at hvis den gemmer en værdi for en bruger, så kan denne værdi ændres ved en anden bruger besøger siden?
Grunden til jeg spørger er fordi jeg sidder og arbejder med noget ajax server control, hvor jeg ikke rigtig kan få lavet så jeg kan parse flere argumenter med ICallbackEventHandler og derfor overvejer at bruger en webservice istedet for. Informationen er hentet fra en extern xml fil, ikke alt intoet bruges, men har gemt resultatet fra httprequesten som static, og kan derfor kontrollere om den skal ud og hente xml filen ude fra eller den er i hukommelsen fra sidste request. Men det ville ikke virke så godt hvis en bruger fik information fra en andens request.
Der er nok nogen der ville sætte spørgsmål om det er smart at gemme information som static xmldocument, da hvis der er mange brugere og hukommelses forbruget kunne løbe op hvis det er større xmldocumenter. Men ka ikke rigtig sige pt om det vil blive et problem, men regner ikke med at det gør det.
Det første skridt henter den xml documentet, hvor der kun bruges lidt information til at validere at det er den ønskede xml document, og så skal brugeren tilføje eller afvise resultatet, hvorefter den kan sættes til null igen.
To bruger der kalder din web service vil tilgaa samme static.
Men du kan godt deploye flere web apps paa en server. Forestil dig f.eks. et web hotel med tusinder af kunder. Hvis dig og en anden deployer samme app paa samme server, saa har I stadig forskellig static.
Kunne det så teoretisk ske hvis man bruger en static værdi i en class at hvis 2 brugere requester den på samme tid at den ene bruger får den andens værdi(hvis værdien er beregnet før den retuneres). Men man ville nok ikke bruge en static værdi i det tilfælde?
Tror stadig der er noget der står lidt uklart for mig, Sidder og kigger på AjaxToolKit source koden, hvor: private static List<ResourceEntry> GetScriptReferencesInternal(Type type, Stack<Type> typeReferenceStack, bool ignoreStartingTypeReferences)
Hvis 2 brugere på samme tid requester en side som så bunder ud i at den skal køre denne function for at få listen over script refferencer, og den gemmer det samme sted i hukommelsen, vil der ikke kunne opstå en form for kollision?
Ja kom jeg også til at tænke på efter jeg havde skrevet at de gange jeg har set brug af static er der returned et resultat med det samme. Men tak, satte nogle ting på plads.
Synes godt om
Ny brugerNybegynder
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.