Domanda

Sto cercando le migliori pratiche qui. Scusate. Lo so che è soggettivo, ma ci sono un sacco di persone intelligenti qui, quindi ci dovrebbe essere alcuni modi di fare questo "molto buoni".

Ho un oggetto personalizzato chiamato Employee. Questo oggetto ha sette immobili come nome, telefono, e-mail, e così via. C'è anche una tabella nel mio database SQL chiamato tblEmployees con sette colonne etichettate in qualche modo simile. Il mio obiettivo è quello di "trasformare" i risultati da una query ad un elenco generico di oggetti Employee. Qual è il modo migliore per farlo (overhead più basso, più veloce)?

Quello che sto facendo attualmente è una cosa che ho visto proposto in tutto il web. Non mi piace perché mi sento come se rallenta il mio caricamento della pagina. liste generiche mi rendono più veloce in quello che faccio, ma non si sentono bene fare i miei clienti pagano il prezzo.

Ecco quello che sto facendo:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

Ho un costruttore che accetta un DataRow (come mostrato), che gestisce la 'property = dr [ "colonna"]' roba.

In attesa di vostri pensieri.

È stato utile?

Soluzione

In breve guardando il codice, e non vedere come viene utilizzato, vorrei restituire un IEnumerator invece di una lista. È quindi possibile utilizzare l'istruzione return resa e non sarà scorrendo l'elenco due volte (una per popolare e uno per visualizzare).

così ...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

Altri suggerimenti

Quale parte del processo si sente è lento? Il tuo metodo non ha colli di bottiglia delle prestazioni eclatanti, per quanto posso vedere.

Io suggerirei di usare un OR Mapper come Linq2SQL o Entity Framework

La ragione per la costruzione di una lista è quello di passare tra le funzioni sul lato server.

Qual è il vantaggio di passare alla lista invece di passare un riferimento DataSet o anche un DataTable?

Quei pensieri a parte, quello che si sta facendo è una procedura standard per la costruzione di una lista. Come pensi che si potrebbe accelerarlo? Evitando di instancing l'oggetto Employee? Si potrebbe quindi fare a meno l'oggetto Employee che probabilmente pasticcio con la vostra modellazione entità.

Quello che state facendo ora è qualcosa che deve essere fatto in un modo o in un altro a un certo punto, e non si può davvero farlo molto più velocemente di quanto il modo in cui hai descritto. Ma è possibile ridurre il numero di volte che devi farlo a tutti mettendo in cache i dati.

Conservare l'elenco dei clienti nella cache. Popolarla all'avvio dell'applicazione, per esempio. Quando qualcosa cambia un record cliente si aggiorna la cache e salva il record al database. Qualsiasi legge da qualsiasi utente andrà alla cache, non il database.

Questo approccio di solito è un ordine di grandezza più veloce di qualsiasi approccio che colpisce il database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top