Domanda

Io sono un programmatore esperto in eredità (ancora object oriented) strumento di sviluppo e di effettuare il passaggio a C#/.Net.Sto scrivendo una piccola applicazione utente che utilizza SQL server CE 3.5.Ho letto concettuale del set di dati e le relative doc e il mio codice funziona.

Ora voglio fare in modo che sto facendo "destra", ottenere un feedback da parte di esperti .Net/SQL Server, programmatori, il tipo non si ottiene dalla lettura del doc.

Ho notato che ho un codice come questo in un paio di punti:

var myTableDataTable = new MyDataSet.MyTableDataTable();
myTableTableAdapter.Fill(MyTableDataTable);

... // other code

In un'unica app utente, sarebbe in genere basta farlo una volta quando viene avviato l'applicazione, creare un'istanza di un oggetto DataTable, per ogni tabella, e quindi memorizzare un ref in modo che tu mai a utilizzare quello oggetto che è già compilato con i dati?In questo modo si sarebbe mai solo leggere i dati dal db una volta invece di potenzialmente più volte.O è l'overhead di questo così piccolo che non importa (plus potrebbe essere controproducente con tabelle di grandi dimensioni)?

È stato utile?

Soluzione

Per la CE, probabilmente si tratta di un non problema.Se vi state spingendo questa applicazione per migliaia di utenti ed erano tutti di colpire un DB centralizzato, si potrebbe desiderare di trascorrere del tempo su di ottimizzazione.In un singolo utente DB di istanza come CE, a meno che non hai dei dati che dice che è necessario ottimizzare, non vorrei spendere tempo a preoccuparsi di esso.Prematura di ottimizzazione, etc.

Altri suggerimenti

Il modo per decidere varia tra il 2 principale paio di cose 1.La data sarà accede costantemente 2.C'è un sacco di dati

Se siete constanty utilizzando i dati nelle tabelle, poi li carico sul primo utilizzo.Se solo occasionalmente utilizzare i dati, compilare la tabella, quando necessario, e poi disfarsene.

Per esempio, se si dispone di 10 gui schermi e utilizzare solo myTableDataTable su 1 di loro, leggere solo su quella schermata.

La scelta davvero non dipende da C# se stesso.Si tratta di un punto di equilibrio tra:

  1. Come spesso si usa i dati in tuo codice?
  2. Dati sempre cambiare (e non si cura se lo fa)?
  3. Ciò che è relativo (tempo) costo di ottenere di nuovo i dati, rispetto a tutto il resto del tuo codice?
  4. Quanto valore che avete messo su prestazioni, rispetto sviluppatore sforzo/tempo (per questa particolare applicazione)?

Come regola generale:per le applicazioni di produzione, in cui i dati non cambiano spesso, mi sarebbe probabilmente creare il DataTable una volta e poi tenere su il riferimento, come si parla.Vorrei anche prendere in considerazione di mettere i dati in un tipo di raccolta/elenco/dizionario, invece del generico classe DataTable, se non altro perché è più facile per consentire al compilatore di prendere i miei errori di battitura.

Per un programma di utilità semplice che si esegue per voi stessi, che "inizia, fa la sua cosa e termina", è probabilmente non vale la pena.

Stai chiedendo informazioni su Windows CE.In che cura, in particolare, mi sarebbe più probabile fare la query solo una volta e tenere su i risultati.Mobile OSs extra vincoli di batterie e spazio desktop software non ha.In sostanza, un sistema operativo mobile rende proiettile #4 molto più importante.

Ogni volta che si aggiunge un altro recupero chiamata da SQL, si effettuano chiamate a librerie esterne più spesso, il che significa che si sono probabilmente in esecuzione più a lungo, allocare e rilasciare più memoria, più spesso (che aggiunge la frammentazione), e possibilmente causando il database per essere ri-leggere dalla memoria Flash.e ' più probabile che molto meglio per tenere su i dati, una volta installato, supponendo che si può (vedi punto #2).

È più facile capire la risposta a questa domanda quando si pensa di set di dati come una "sessione" di dati.Riempire il dataset;si lavora con loro;e poi metti i dati o rifiutarlo quando hai finito.Quindi è necessario fare domande come questa:

  1. Come gli attuali dati devono essere? Non sempre hanno bisogno di molto, molto più recente, o il database non cambiare spesso?
  2. Che cosa si sta utilizzando i dati per? Se stai usando solo per i report, quindi si può facilmente riempire un set di dati, eseguire il report, poi gettare il set di dati di distanza, e la prossima volta basta fare uno nuovo.Che ti do i dati più recenti comunque.
  3. Solo la quantità di dati stiamo parlando? Hai detto che stai lavorando con un relativamente piccolo set di dati, quindi non c'è una grande memoria di impatto se si carica tutto in memoria e tenerlo lì per sempre.

Dal momento che si dice è un singolo utente delle app senza un sacco di dati, penso che sei al sicuro il caricamento di tutto, all'inizio, con il vostro set di dati, e quindi l'aggiornamento su chiudi.

La cosa principale è necessario essere preoccupati in questo scenario è:Che cosa succede se l'app viene chiuso in modo anomalo, a causa di un incidente, di interruzione di alimentazione, etc.?Sarà l'utente a perdere tutto il suo lavoro?Ma come avviene, i set di dati sono estremamente facili da serializzare, in modo che si può abbastanza facilmente implementare un "save ogni tanto" procedura per serializzare il set di dati contenuti su disco in modo che l'utente non si perde un sacco di lavoro.

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