Attualmente sto sviluppando un API Web REST MV C# e sto cercando di scegliere tra una delle due possibilità per il nostro progetto.C# Metodo statico contro istanza oggetto
Senza entrare troppo nel nostro progetto, intendiamo avere una classe per l'accesso ai dati, che chiameremo DataSource
. Ogni DataSource
dovrà eseguire blocchi di logica piccoli e contenuti per creare correttamente una risposta appropriata. A causa del desiderio di poter caricare il codice in futuro, non vogliamo semplicemente avere queste funzioni su DataSource
, ma vorremmo che fossero fornite da altri gruppi. Abbiamo una dimostrazione di questo concetto implementata e, finora, così buona.
Quello che sto cercando di decidere è scrivere una classe statica con una singola funzione statica ExecuteQuery
o scrivere un metodo factory per creare istanze di queste classi, che hanno un metodo di istanza chiamato ExecuteQuery
.
Quali sono le considerazioni sulle prestazioni tra la creazione di più oggetti di breve durata ogni richiesta, o la chiamata di metodi statici?
Intuitivamente, i metodi statici sarebbero più veloci, ma mi aspetto già che mi imbatterò in un po 'di mal di testa chiamandoli attraverso la riflessione (per supportare il requisito di codice caricato a caldo).
Se non c'è un'enorme penalità per oggetti di breve durata, allora potrebbero vincere solo con la semplicità.
informazioni relative ai nostri carichi aspetterebbe:
- I tempi di risposta nel 300ms - gamma 800ms
- carico medio di circa 2000 clienti web
- carico di picco di circa 4000 clienti
- Clienti che fanno query ogni 2 - 5 secondi
- Frequenza di picco del client di 1 query al secondo
Inoltre, ogni DataSource
creerebbe un massimo di 8, una media di 3 di queste istanze.
Probabilmente il tuo intento di utilizzare il riflesso causerà un impatto maggiore sulle prestazioni rispetto all'utilizzo dell'istanza statica. Come altri hanno commentato, dovresti scegliere il modulo che ha il maggior senso di _design_. In alternativa, poiché hai alcune metriche previste, potresti prendere in giro un'implementazione statica/di istanza e avere un'idea del sovraccarico che dovrai affrontare. –