Comparación sobre el tiempo de ejecución.

Iniciado por Eleкtro, 8 Agosto 2013, 11:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Hola, me gustaría saber una cosa muy simple, pero no encuentro está información en ningún sitio.


¿Que tarda más en realizarse, una comprobación, o setear diréctamente un valor?

Pongo un ejemplo:


Código (vbnet) [Seleccionar]

' Setear diréctamente:
Private MyPoint As New Point(0, 8)

Private Sub blabla()

   MyPoint.X = 257
         
End Sub


Código (vbnet) [Seleccionar]

' Comprobar, y si la condición no se cumple, setear:
Private MyPoint As New Point(0, 8)

Private Sub blabla()

    If Not MyPoint.X = 257 Then MyPoint.X = 257
         
End Sub



Quizás también tenga que ver del objeto con el que estemos tratando, por ejemplo quizás una propiedad de un control "pesado" tardaría más en leerse que en diréctamente setear su valor?









Novlucker

#1
Yo me iría a la teoría ...
Stack, Heap, tipos por valor, por referencia (tener en cuenta la interfaz IEquatable), objetos inmutables, etc :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

Ala, dices eso y te quedas tan pancho no? xD, te has pasado Novlucker uf...  :silbar:

El Heap he buscado lo que es y no lo entiendo. http://en.wikipedia.org/wiki/Heap_%28data_structure%29
Otra cosa que desconocía era la interface IEquatable, que tampoco lo entiendo. http://msdn.microsoft.com/en-us/library/ms131187.aspx

Pero aún juntando esas dos piezas que no entiendo en el puzzle que has hecho, ¿Que quieres decir con todo eso?, no capto la teoría de la que hablas.

Me pregunto que tiene que ver la pila, y el resto de cosas que has mencionado, como por ejemplo si un objeto es de estado inmutable o mutable, ¿con todo esto?, imagino que algo si que tendrá que ver... claro, pero no lo capto, podrías decirlo de una manera más comprensible para mi?.

Saludos!








1mpuls0

Por qué no intentas haciendo una pequeña prueba, en donde tengas bloque que estime el tiempo de ejecución del programa, desde su inicio a fin y realices pruebas para estos dos casos.

No entiendo muy bien por qué te surge la duda.

Es más rápido setear un valor.
Pero sería más correcto verificar.
abc

Novlucker

CitarEl Heap he buscado lo que es y no lo entiendo. http://en.wikipedia.org/wiki/Heap_%28data_structure%29
Las variables por valor se almacenan en un sitio, y las por referencia en otro, por lo que el acceso a los datos es diferente ...
http://proyecto-csharp.blogspot.com/2010/07/gestion-de-memoria.html

CitarOtra cosa que desconocía era la interface IEquatable, que tampoco lo entiendo. http://msdn.microsoft.com/en-us/library/ms131187.aspx

Siguiendo con lo anterior y si hablamos de implementar la interfaz IEquatable para el caso los objetos por referencia, no es lo mismo comparar la referencia a un objeto, que tener la implementación de un método para la comparación.
http://msdn.microsoft.com/es-es/library/ms131187(v=vs.80).aspx

Cuando hablaba de los objetos mutables/inmutables, iba puntualmente al manejo que se realiza en memoria, y como se asignan estos, y tiene que ver por ejemplo con el motivo por el cual debemos de utilizar un StringBuilder (o algún método que lo implemente) para concatenar string (inmutable) en .NET, y no "a & b" (VB.NET) o "a + b" (C#) ;)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

#5
Cita de: Darhius en  8 Agosto 2013, 16:30 PMNo entiendo muy bien por qué te surge la duda.

Hola,
la razón es simple, quiero programar de manera correcta y a ser posible de la manera más eficaz, aunque en este caso busco velocidad antes que eficacia, de ahí la pregunta xD.


CitarPor qué no intentas haciendo una pequeña prueba, en donde tengas bloque que estime el tiempo de ejecución del programa

Codeé hace tiempo un procedimiento para estimar el tiempo mediante un stopwatch, pero lo usaba para instrucciones más largas, no lo he usado para este experimento porque sé que la diferencia va a ser mínima, de unos pocos MS, además antes que fiarme de este tipo de metodos pefiero confiar en la opinión de gente experta que haya estudiado como funcionan por dentro estas comparaciones internas.

Gracias y saludos!