Probar procedures en SQL

Ésta entrada será muy corta.

Hace algún tiempo me dijeron "tienes que optimizar este procedure", así que lo analicé, hice algunas mejoras, y en la primera corrida del procedure, demoró aproximadamente 3 veces más de lo que demoraba el procedure original, pensé que había un error dado a que había aplicado (según yo) las "buenas prácticas", así que lo ejecuté denuvo y demoró la mitad del procedure original.

Que pasó? Sencillo, el caché y el buffer.

Tengan en cuenta que la ventaja de un procedure, es que compila la consulta y la guarda compilada, (es por eso que es una muy buena práctica el usuarlos) y lo que pasó fue que en la primera ejecución de mi modificación, es procedure tuvo que eliminarse y volverse a compilar.

Buscando un poco con internet, di con un método que me ayudaría un poco con esto de los tiempos (dejando de lado el usar el analizador de querys obviamente) y es el hecho de simplemente limpiar el caché y el buffer antes de ejecutar el procedure y esto se hace con los siguientes métodos

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE


Saludos

Parpadeo tipo msn VB.Net

Muchas veces me pregunté como es que se hace para que las ventanas del msn (que normalmente están minimizadas) empiecen a parpadear (lo que se considera una alerta).

Buscando un poco por internet, me encontré con una web que lo explicaba.

Aquí el código:

Este efecto es, por ejemplo, el que vemos cuando alguien nos escribe en una conversación de Messenger que tenemos minimizada.

flash_window.gif

El Net Framework no nos provee un método para lograr dicho efecto por ende la alternativa obligada es recurrir a la API de Windows. El nombre de nuestra función es FlashWindowEx alojada en User32.dll y su utilización es de lo más sencilla. La declaración a incluir es:

<DllImport(“user32.dll”)> _
Public Shared Function FlashWindowEx(ByRef pfwi As FLASHWINFO) As Integer
End Function

Y para su invocación solo se debemos completar la siguiente estructura que será pasada como parámetro:

<StructLayout(LayoutKind.Sequential)> _
Structure FLASHWINFO
    Dim cbSize As Integer
    Dim hwnd As System.IntPtr
    Dim dwFlags As Integer
    Dim uCount As Integer
    Dim dwTimeout As Integer
End Structure


Miembros de la estructura FLASHWINFO: 

  1. cbSize = peso en bytes de la estructura.
  2. hwnd = handler de la ventana sobre la cual actuamos.
  3. dwFlags = opciones que definirán el comportamientos de la función.
  4. uCount = cantidad de parpadeos deseados.
  5. dwTimeout = frecuencia en milisegundos del parpadeo.
    Constantes utilizadas para el seteo del miembro dwFlags.

    Private Const FLASHW_STOP As Integer = &H0
    Private Const FLASHW_CAPTION As Integer = &H1
    Private Const FLASHW_TRAY As Integer = &H2
    Private Const FLASHW_ALL As Integer = (FLASHW_CAPTION Or FLASHW_TRAY)
    Private Const FLASHW_TIMER As Integer = &H4
    Private Const FLASHW_TIMERNOFG As Integer = &HC

    Significado de cada una de las constantes:
    1. FLASHW_STOP = Detiene el parpadeo. El sistema devuelve la ventana a su estado original.
    2. FLASHW_CAPTION = Hace que parpadee la barra de título ventana.
    3. FLASHW_TRAY = Hace que parpadee el botón de la barra de tareas de una ventana.
    4. FLASHW_ALL = Suma lógica de las dos anteriores, con lo cual hace que parpadeen la barra de titulo y el botón de la barra de tareas de una ventana.
    5. FLASHW_TIMER = Hace que parpadee continuamente hasta que se llame a la funcion con FLASHW_STOP.
    6. FLASHW_TIMERNOFG = Hace que parpadee continuamente hasta que la ventana tome el foco.

      Ahora si queremos hacer que el caption de nuestra ventana comience a parpadear …
      Dim FlashInfo As FLASHWINFO

      With FlashInfo


      .cbSize = Convert.ToUInt32(Marshal.SizeOf(GetType(FLASHWINFO)))

      .dwFlags = CType(FLASHW_ALL Or FLASHW_TIMER, Int32)

      .hwnd = Me.Handle

      .dwTimeout = 0

      .uCount = 0

      End With

      FlashWindowEx(FlashInfo)

      Cuando queramos que deje de parpadear no tenemos mas que llamar a FlashWindowEx seteando previamente el flag FLASHW_STOP en la estructura FLASHWINFO.

      Dim FlashInfo As FLASHWINFO


      With FlashInfo

      .cbSize = Convert.ToUInt32(Marshal.SizeOf(GetType(FLASHWINFO)))

      .dwFlags = CType(FLASHW_STOP, Int32)

      .hwnd = Me.Handle

      .dwTimeout = 0

      .uCount = 0

      End With

      FlashWindowEx(FlashInfo)

      Ultimas consideraciones:
      1. Si dwTimeout es cero, la funcion utiliza la frecuencia establecida para el parpadeo del cursor en las opciones de teclado.
      2. Al utilizar el flag FLASHW_TIMERNOFG no es necesario llamar con FLASHW_STOP para detenerlo, basta con enfocar la ventana.

      Fuente:
      http://puntobit.wordpress.com/2007/12/01/parpadeo-del-titulo-de-ventana-en-vbnet-flashwindowex/

      Nota:
      Si deseas un poco más de información, también puedes visitar esta web
      http://geeks.ms/blogs/lmblanco/archive/2008/04/02/ventanas-parpadeantes-con-flashwindowex-y-ii.aspx