Buonasera a tutti.
All'interno di una applicazione web, ho sviluppato un servizio che si occupa di elaborare delle espressioni, a partire da dati memorizzati in un database e fornire i risultati.
Ovviamente il servizio è piuttosto pesante, in parte per la sua stessa natura, in parte per la mia poca esperienza sul campo.
Dal momento che i dati nel database non variano spessissimo, avevo pensato di eseguire il caching dei risultati in modo da poterli riutilizzare finchè sono validi.

In quest'ottica mi stavo domandando se allora non fosse opportuno, nella configurazione della mia applicazione, aggiungere il servizio come "Singleton" anzichè "Scoped".
Cosi facendo, all'interno del servizio, potrei mantenere una lista di risultati, e accedervi ogniqualvolta da un web client arriva una richiesta.

Alternativamente avevo pensato di aggiungere un ulteriore servizio, separato da quello in oggetto, di tipo IMemoryCache in cui andare a poggiare i dati della cache.
Voi cosa ne pensate?
Grazie
Ciao!
la soluzione di utilizzare un servizio può funzionare se hai modo di indicizzare i risultati delle tue espressioni.. quando un client chiede di eseguire un espressione, il servizio come singleton esegue l'espressione e si salva il risultato (magari in una lista o in un dictionary), pronto a fornirlo al prossimo client che chiede la stessa espressione.
Attenzione però ad eventuali "memory leak" in quanto il servizio "singleton" non ha un fine vita (fino al termine dell'applicazione) e di conseguenza in base a come è strutturato potrebbe crescere all'infinito (e quindi causare un memory leak).
In genere questo tipo di servizio è l'ideale per mantenere lo stato dell'applicazione..

Personalmente per situazioni simili a quella che hai descritto io utilizzo più il secondo approccio che hai suggerito, quello del caching..
usando un servizio "Transient" per accedere al database e applicando un pattern di tipo "decorator" (che implementa IMemoryCache) a questo servizio.. in modo che ogni chiamata verso il database venga prima controllata se esistente nella cache.. e se non è esistente viene registrata pronta a essere distribuita dalla cache e non dal database la prossima volta.

Non sono bravissimo a spiegarmi ma è molto più semplice di quel che sembra.
Se pensi che potrebbe esserti utile fammi sapere e ti preparo una piccola demo.

Maurizio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.