Ho un'app ASP.net MVC 5 che funziona perfettamente. Un mio collega ha realizzato un progetto che legge i dati dai file e ne rimbalza alcuni per produrre alcuni calcoli da visualizzare nell'applicazione web. Chiamo i suoi metodi e ottengo i dati indietro e visualizzati sullo schermo.
Come parte del suo progetto ha implementato un tipo di sistema di memorizzazione nella cache, non utilizza nessuno degli strumenti di memorizzazione nella cache in. NET, sta semplicemente tenendo alcuni dei file necessari per il calcolo dei numeri in memoria poiché questi impiegano molto tempo per caricare e sono sicuramente il collo della bottiglia.
Quindi ho bisogno di fare due cose
1) Avere un'istanza della classe all'interno del progetto in modo che utilizzi i file in memoria.
2) Imposta un processo di lavoro che viene eseguito ogni giorno alle 7:00 per caricare quei file nel memo.
Per il numero uno ho istanziato la classe del mio collega come una classe statica e questo sembra funzionare un po 'di tempo ma è inaffidabile per qualche motivo sto indovinando a causa dei timeout del pool di app, sono anche preoccupato per l'efficacia di questo e se avrò problemi con più utenti che inviano richieste concorrenti. C'è un modo migliore per raggiungere questo obiettivo? Ho esaminato varie librerie di caching .NET in modo che potessi convincere il mio collega a implementare una cache corretta, ma per ora suppongo di non poterlo chiedere. Sono un po 'confuso sul motivo per cui in MVC ogni volta che un utente invia una nuova richiesta viene istanziato un nuovo controller quindi istanziare nuovamente la classe del mio collega e perdere i file in memoria?
Per il numero 2 ho letto su webbackgrounder una libreria per ASP.net che può eseguire attività in background. Tutto quello che devo fare è mentre l'app è in esecuzione su IIS, quindi eseguire un metodo tutti i giorni alle 7 del mattino.
Aggiornamento:
Non riesco a salvare l'output perché ho bisogno di calcolare queste vlaues al volo, ci sono circa 10 diversi input nel calcolo che possono cambiare in qualsiasi numero di valori diversi.
Posso davvero mettere i file di input in un database ma questo non risolve il mio problema, non sarebbe più veloce che caricarli da file, il che richiede troppo tempo, voglio tenere questi elementi in memoria quindi l'approccio alla cache.