Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 8 Agosto 2013, 11:35 am



Título: Comparación sobre el tiempo de ejecución.
Publicado por: Eleкtro en 8 Agosto 2013, 11:35 am
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
  1. ' Setear diréctamente:
  2. Private MyPoint As New Point(0, 8)
  3.  
  4. Private Sub blabla()
  5.  
  6.   MyPoint.X = 257
  7.  
  8. End Sub

Código
  1. ' Comprobar, y si la condición no se cumple, setear:
  2. Private MyPoint As New Point(0, 8)
  3.  
  4. Private Sub blabla()
  5.  
  6.    If Not MyPoint.X = 257 Then MyPoint.X = 257
  7.  
  8. 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?



Título: Re: Comparación sobre el tiempo de ejecución.
Publicado por: Novlucker en 8 Agosto 2013, 15:35 pm
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


Título: Re: Comparación sobre el tiempo de ejecución.
Publicado por: Eleкtro en 8 Agosto 2013, 16:05 pm
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!


Título: Re: Comparación sobre el tiempo de ejecución.
Publicado por: 1mpuls0 en 8 Agosto 2013, 16:30 pm
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.


Título: Re: Comparación sobre el tiempo de ejecución.
Publicado por: Novlucker en 8 Agosto 2013, 16:39 pm
Citar
El 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

Citar
Otra 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


Título: Re: Comparación sobre el tiempo de ejecución.
Publicado por: Eleкtro en 8 Agosto 2013, 22:24 pm
No 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.


Citar
Por 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!