Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[ASP.NET] Klassen globaal instantiëren in application?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi mensen. Ik ben aan het experimenteren geslagen, en zit over een 'model' na te denken, waar ik graag de voor- en nadelen van wil weten.

Een aantal klassen in mijn website wordt veel gebruikt. Tot nu toe was het meestal gewoonte om per user een nieuwe instance van de klasse te maken. Maar nu vraag ik mij af; waarom zou ik deze veelgebruikte klassen niet slechts eenmaal instantiëren, en wel bij de application start? Kortom, ik maak 1 klasse genaamd 'Global'. Bij application_start doe ik iets als 'Application("Global") = New Global. In "Global" heb ik constructors naar alle klassen die ik wil "sharen". Bij het instantiëren van Global. instantiëren ik ook deze andere klassen. En zo zijn ze voor iedereen benaderbaar. Zo zou ik dus slechts 1 maal een instance per klasse maken, tegenover honderden instances per user in de oude situatie.

Maar nu zit ik met een aantal vragen, en dit is een terrein wat ik nog niet helemaal begrijp, een echt diepgaande kennis van het .net framework heb ik (nog) niet.

Voor wat ik begrepen heb, is het cache object beter geschikt voor memory management. Dat is ook gelijk het nadeel, want het systeem kan vroeger of later besluiten om objecten uit het cache object te gooien, terwijl objecten in application gegarandeerd bestaan. Aan de andere kant kan je cache wel redelijk beheersen door timeouts e.d. te geven (zoals CacheItemPriority.NotRemovable). Ook heb ik ergens gelezen dat cache thread safe is, maar je hetzelfde bereikt met lock en unlock op application.

Wat ik wil doen is 1 maal locken op het moment van instancieren van de klassen om daarna te unlocken. Is het daarna nog een probleem als meerdere mensen tegelijkertijd de functies aanroepen? Of hangt dat helemaal af van wat ik ga doen? (NB: ik neem aan dat database updates en schrijfacties vast geen goed idee zijn?)
  • Moet ik misschien shared / static members maken, en waarom? Bereik ik in theorie niet hetzelfde resultaat door geen globale klassen te gebruiken, maar zoveel mogelijk shared members te maken? En kleeft hier ook ergens een nadeel aan?
  • Wat gebeurt er als meerdere mensen tegelijkertijd een shared member benaderen?
  • Moet ik singleton klassen maken, en waarom?
  • Moet ik misschien niet gebruik maken van het cache object i.p.v. het application object?
Graag hoor ik hier jullie ideeën over...