Pregunta

Soy un programador experimentado en una herramienta de desarrollo heredada (aunque orientada a objetos) y estoy haciendo el cambio a C#/.Net.Estoy escribiendo una pequeña aplicación de usuario único utilizando SQL Server CE 3.5.Leí el conjunto de datos conceptual y el documento relacionado y mi código funciona.

Ahora quiero asegurarme de que lo estoy haciendo "bien" y obtener comentarios de codificadores experimentados de .Net/SQL Server, del tipo que no se obtiene al leer el documento.

He notado que tengo código como este en algunos lugares:

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

... // other code

En una aplicación de un solo usuario, ¿normalmente haría esto una vez cuando se inicia la aplicación, crearía una instancia de un objeto DataTable para cada tabla y luego almacenaría una referencia para poder usar ese único objeto que ya está lleno de datos?De esta manera, solo leerá los datos de la base de datos una vez en lugar de potencialmente varias veces.¿O la sobrecarga de esto es tan pequeña que simplemente no importa (además podría ser contraproducente con mesas grandes)?

¿Fue útil?

Solución

Para CE, probablemente no sea un problema.Si estuviera enviando esta aplicación a miles de usuarios y todos accedieran a una base de datos centralizada, es posible que desee dedicar algo de tiempo a la optimización.En una base de datos de instancia de un solo usuario como CE, a menos que tenga datos que indiquen que necesita optimizar, no perdería tiempo preocupándome por eso.Optimización prematura, etc.

Otros consejos

La forma de decidir Varys entre 2 cosas principales 1.¿Los datos serán accesos constantemente 2?¿Hay muchos datos?

Si utiliza constantemente los datos de las tablas, cárguelas la primera vez que las utilice.Si solo usa los datos ocasionalmente, complete la tabla cuando la necesite y luego deséchela.

Por ejemplo, si tiene 10 pantallas GUI y solo usa myTableDataTable en 1 de ellas, léala solo en esa pantalla.

La elección realmente no depende del propio C#.Todo se reduce a un equilibrio entre:

  1. ¿Con qué frecuencia utiliza los datos en su código?
  2. ¿Los datos cambian alguna vez (y le importa si cambia)?
  3. ¿Cuál es el costo relativo (tiempo) de obtener los datos nuevamente, en comparación con todo lo demás que hace su código?
  4. ¿Cuánto valor le pones? actuación, versus esfuerzo/tiempo del desarrollador (para esta aplicación en particular)?

Como regla general:para aplicaciones de producción, donde los datos no cambian con frecuencia, probablemente crearía el DataTable una vez y luego mantendría la referencia como usted menciona.También consideraría poner los datos en una colección/lista/diccionario escrito, en lugar de la clase DataTable genérica, al menos porque es más fácil dejar que el compilador detecte mis errores de escritura.

Para una utilidad simple que usted mismo ejecuta y que "comienza, hace lo suyo y finaliza", probablemente no valga la pena el esfuerzo.

Estás preguntando sobre Windows CE.En ese caso particular, lo más probable es que haga la consulta solo una vez y conserve los resultados.Los sistemas operativos móviles tienen limitaciones adicionales en cuanto a baterías y espacio que el software de escritorio no tiene.Básicamente, un sistema operativo móvil hace que el punto 4 sea mucho más importante.

Cada vez que agrega otra llamada de recuperación desde SQL, realiza llamadas a bibliotecas externas con más frecuencia, lo que significa que probablemente esté ejecutando más tiempo, asignando y liberando más memoria con más frecuencia (lo que agrega fragmentación) y posiblemente provocando que la base de datos se vuelva a leer. Memoria flash.Lo más probable es que sea mucho mejor conservar los datos una vez que los tenga, suponiendo que pueda (consulte el punto n.° 2).

Es más fácil encontrar la respuesta a esta pregunta cuando se piensa en los conjuntos de datos como una "sesión" de datos.Usted llena los conjuntos de datos;trabajas con ellos;y luego vuelves a guardar los datos o los descartas cuando hayas terminado.Entonces necesitas hacer preguntas como esta:

  1. ¿Qué tan actualizados deben estar los datos? ¿Necesita siempre tener lo último o la base de datos no cambiará con tanta frecuencia?
  2. ¿Para qué estás usando los datos? Si solo lo usa para informes, puede completar fácilmente un conjunto de datos, ejecutar su informe, luego desechar el conjunto de datos y la próxima vez simplemente crear uno nuevo.Eso le dará datos más actuales de todos modos.
  3. ¿De cuántos datos estamos hablando? Ha dicho que está trabajando con un conjunto de datos relativamente pequeño, por lo que no hay un impacto importante en la memoria si lo carga todo en la memoria y lo mantiene allí para siempre.

Dado que dice que es una aplicación de un solo usuario sin muchos datos, creo que es seguro cargar todo al principio, usarlo en sus conjuntos de datos y luego actualizarlo al cerrar.

Lo principal que debe preocuparle en este escenario es:¿Qué pasa si la aplicación se cierra de forma anormal debido a un fallo, un corte de energía, etc.?¿El usuario perderá todo su trabajo?Pero resulta que los conjuntos de datos son extremadamente fáciles de serializar, por lo que puedes implementar con bastante facilidad un procedimiento de "guardar de vez en cuando" para serializar el contenido del conjunto de datos en el disco para que el usuario no pierda mucho trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top