Avatar billede superraider Nybegynder
05. februar 2008 - 17:56 Der 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?
Avatar billede arne_v Ekspert
05. februar 2008 - 18:04 #1
static = en forekomst per kopi af applikationen der koerer

desktop app = en for hver gang du starter programmet med den

web app = en for hver web app der bruger den

(det tekniske udtryk er: en for hver app domain)
Avatar billede arne_v Ekspert
05. februar 2008 - 18:06 #2
og den vil ogsaa vaere delt for web services requests fra forskellige brugere
Avatar billede superraider Nybegynder
05. februar 2008 - 18:32 #3
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?
Avatar billede superraider Nybegynder
05. februar 2008 - 18:40 #4
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.
Avatar billede arne_v Ekspert
05. februar 2008 - 18:42 #5
Nej.

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.
Avatar billede superraider Nybegynder
05. februar 2008 - 18:53 #6
oki, så må jeg lige finde en anden måde at gøre det på.

Men smid bare et svar, tak for hjælpen.
Avatar billede superraider Nybegynder
05. februar 2008 - 18:56 #7
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?
Avatar billede superraider Nybegynder
05. februar 2008 - 19:02 #8
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?
Avatar billede arne_v Ekspert
06. februar 2008 - 04:44 #9
re 18:56:51)

Det vil være meget uhensigtsmæssigt med en static variabel til midlertidig opbevaring
i en flerbruger sammenhæng.
Avatar billede arne_v Ekspert
06. februar 2008 - 04:45 #10
re 19:02:24)

Det gør ikke noget at der bruge en static metode.

Problemet er hvis resultatet gemmes i en static variabel.
Avatar billede arne_v Ekspert
06. februar 2008 - 04:45 #11
og et svar
Avatar billede superraider Nybegynder
06. februar 2008 - 07:05 #12
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.
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

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