Nella mia domanda le richieste sono elaborate da oggetti di Processor
classi classificate, qualcosa come CreateItemProcessor
o MoveItemToGroupProcessor
. La classe Base Processor implementa la maggior parte della logica di elaborazione comune e quelle derivate eseguono alcune attività correlate alla logica aziendale.
Un oggetto di un certo tipo di processore viene creato prima dell'elaborazione della richiesta, e poi cancellato in seguito.
Alla fine arrivò a una situazione, quando la creazione di un singolo oggetto del processore stava prendendo una parte importante del tempo di elaborazione della richiesta. Quindi ora sto pensando alla creazione di un pool di oggetti del processore di richiesta e riutilizzarli invece di utilizzare l'approccio di creazione / eliminazione.
Il problema qui è che ogni singolo oggetto Processor
non è thread-safe, e in realtà non dovrebbe essere protetto dal rischio: memorizza i dati specifici della richiesta all'interno. Quindi il mio approccio generale a questo è il seguente:
- Prova ad acquisire "processore" da un pool;
- Se non ce ne sono disponibili, attendi;
- Quando è disponibile il processore, contrassegnalo come "funzionante" e avvia l'elaborazione;
- Al termine del lavoro, "restituisci" il processore al pool;
- Notifica pool che il processore gratuito è disponibile.
Esiste una sorta di modello di progettazione per questo? Mi sto perdendo qualcosa dai pattern GoF esistenti? Eventuali dettagli di implementazione relativi a C #?