Posts destacados

Nuevo libro de desarrollo para Windows 8 y Windows Phone 8Nuevo libro de desarrollo para Windows 8 y Windows... Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo,...

Read more

Preparándonos para el #MegathonW8 y II – Instalando las herramientas de desarrollo.Preparándonos para el #MegathonW8 y II –... Una vez que ya tenemos nuestro flamante Windows 8 instalado en nuestro disco duro virtual, según los pasos del primer capitulo de esta guía. Lo que debemos de hacer es instalarnos...

Read more

Preparándonos para el #MegathonW8 y I Instalación de Windows 8 en un VHDPreparándonos para el #MegathonW8 y I Instalación... Este es el primer post de una serie de ellos cuya intención es facilitar a los asistentes al megathon que se celebrara en breve, las instrucciones necesarias para conocer...

Read more

Beca para el Megathon Windows 8Beca para el Megathon Windows 8 Como seguramente todos ya sabréis, los próximos días 7, 8 y 9 de Septiembre se celebrara en varias ciudades españolas al mismo tiempo un hackathon sobre desarrollo para...

Read more

[OFFTOPIC] Oferta de trabajo.[OFFTOPIC] Oferta de trabajo. Madre mía, hasta ahora realmente no me había dado cuenta de lo abandonado que tengo mi blog, como pasa el tiempo de rápido por dios… Demasiadas cosas a hacer tanto dentro...

Read more

Windows Phone y .NET Rss

Mejoras de Rendimiento en entornos SQL CE – I

Posteado el : 07-09-2011 | Por : tecnologia | En : Windows Phone 7

1

Una de las cosas que debemos de tener muy en cuenta a la hora de trabajar con dispositivos móviles, es el rendimiento. Ya sabemos que pronto saldrán, si es que no lo han echo ya móviles con doble procesador y demás, pero no dejamos de necesitar controlar mas nuestro entorno en un dispositivo móvil que en un equipo de sobremesa.

Últimamente a nadie se le escapa que cualquier desarrollador en entornos de escritorio, sencillos, ha (hemos) dejado un poco de lado esta parte de rendimiento, ordenadores con 8 Gb de Ram, 4 núcleos, etc, etc, hacen que el rendimiento este en tu lista de requisitos bastante alejado de las primeras posiciones.

Como he comentado, nos encontramos con otro tipo de entornos y si queremos hacer buenas aplicaciones empresariales para Windows Phone 7 ya no puede estar el rendimiento al fondo de la lista de requisitos, sino mas bien al contrario, si no es la primera será la segunda.

El uso de SQL CE como base de datos relacional en una de nuestras aplicaciones hace que tengamos a parte un elemento mas de saturación de rendimiento, nuestra aplicación y los propios procesos internos que debe de hacer SQL CE. Pero es bastante sencillo seguir una serie de consejos que aplicándolos nos ahorran bastante tiempo de proceso.

Inserción de Datos.

Nuestro amigo el Insert. Esto que voy a comentar es mas de sentido común que de forma de hacerlo especial para ganar rendimiento.

Pongamos por ejemplo el mapeo de esta sencilla tabla.

[Table]

public class Tabla1

{

    [Column(IsPrimaryKey=true, IsDbGenerated=true)]

    public int ID { get; set; }

 

    [Column]

    public string Nombre { get; set; }

 

    [Column]

    public string Apellidos { get; set; }

 

    [Column]

    public string Email { get; set; }

}

Como digo, una sencilla tabla con 4 campos y clave primaria entera auto incremental.

Si realizamos la inserción por ejemplo de 1000 filas, podemos hacerlo básicamente de 3 formas:

Utilizando InsertOnSubmit y seguidamente realizar un SubmitChanges

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Contexto.Personas1.InsertOnSubmit(Dato);

        Contexto.SubmitChanges();

    }

}

Utilizando también el InsertOnSubmit pero dejar el SubmitChanges para el final

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Contexto.Personas1.InsertOnSubmit(Dato);

    }

 

    Contexto.SubmitChanges();

}

Usar un elemento que sea IEnumerable, utilizar InsertAllOnSubmit y realizar un SubmitChanges.

List<Tabla1> Datos = new List<Tabla1>();

 

Tabla1 Dato;

using (ContextoDatos Contexto = new ContextoDatos(CadenadeConexion))

{

    for (int i = 0; i < int.Parse(NRegistros.Text); i++)

    {

        Dato = new Tabla1();

        Dato.Nombre = "Nombre " + i.ToString();

        Dato.Apellidos = "Apellidos " + i.ToString();

        Dato.Email = "Email" + i.ToString() + "@live" + i.ToString() + ".com";

 

        Datos.Add(Dato);

    }

 

    Contexto.Personas1.InsertAllOnSubmit(Datos);

    Contexto.SubmitChanges();

}

Como alguna que otra vez he oído decir a alguien, las cosas se pueden hacer mal, o muy mal y en este caso usar el SubmitChanges tras realizar un InsertOnSubmit, es sin lugar a dudas una opción malísima. Obviamente todo depende de que aplicación estemos desarrollando pero, tenemos que tener en cuenta que reflejar físicamente los datos en la base de datos y no mantenerlo en memoria hasta hacer un Submit final, salvo en casos en donde las transacciones de la información sea primordial es totalmente innecesario. Tenemos que tener en cuenta que el móvil solo lo usamos nosotros. :-)

Insertando como decimos 1000 registros en 5 ocasiones diferentes el tiempo en realizar cada operación a sido el siguiente:

  Opción 1 Opción 2 Opción 3
1ª Inserción 28.294 ms 422 ms 529 ms
2ª Inserción 33.778 ms 399 ms 394 ms
3ª Inserción 27.331 ms 392 ms 381 ms
4ª Inserción 25.930 ms 504 ms 568 ms
5ª Inserción 26.876 ms 380 ms 390 ms

Es decir usar los métodos 2 y 3 apenas varia el rendimiento, pero estos son un 97% mas rápidos que la opción 1. Ahí queda eso.

En el siguiente post, ya veremos que realizando dos o tres toques sutiles en la definición de nuestras bases de datos, también podremos ganar mucho tiempo.

Print Friendly

Share

Comentarios (1)

Its like you learn my thoughts! You appear to understand so
much approximately this, like you wrote the guide in it or something.
I think that you just could do with some percent to force the message
home a little bit, however instead of that, that is wonderful blog.

A great read. I’ll certainly be back.

Escribe un comentario