526 votos

System.Timers.Timer vs System.Threading.Timer

He estado observando últimamente en algunos de los contadores de tiempo posibles, y los Threading.Timer y Timers.Timer son los que son necesarias para mí (ya que ellos apoyan thread pooling).

Estoy haciendo un juego, y planeo utilizando todo tipo de eventos, con diferentes intervalos, etc..

¿Cuál sería el mejor?

351voto

David Andres Puntos 13569

En este artículo se ofrece una información bastante completa explicación:

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

La diferencia específica parece ser que System.Timers.Timer está orientado a aplicaciones multiproceso y por lo tanto es seguro para subprocesos a través de su SynchronizationObject de la propiedad, mientras que System.Threading.Timer está, irónicamente, no es seguro para subprocesos out-of-the-box.

Yo no creo que hay una diferencia entre los dos en lo que se refiere a lo pequeño de su intervalos pueden ser.

154voto

Tim Lovell-Smith Puntos 2635

System.Timers.Timer es un System.ComponentModel.Component que envuelve una System.Threading.Timer, y proporciona características adicionales para el despacho en un subproceso en particular.

System.Windows.Forms.Timer en lugar envuelve un nativo mensaje-solo-HWND y utiliza la ventana de temporizadores para crear eventos para que Hwnd subproceso de interfaz de usuario.

Si tu aplicación no tiene interfaz de usuario, y desea que el más ligero de peso y de propósito general .Net el temporizador es posible, porque eres feliz averiguar su propia threading/envío de esquema, System.Threading.Timer es tan bueno como se pone en el marco.

(No estoy completamente claro lo que la supuesta 'no es thread safe", con System.Threading.Timer. Tal vez es sólo mismos, tal como solicitó en esta cuestión: el Hilo de seguridad de System.Timers.Timer vs System.Threading.Timer, o tal vez todos, sólo significa que:

a) es fácil escribir las condiciones de carrera cuando usted está utilizando temporizadores. Por ejemplo. ver esta pregunta: Temporizador (System.Threading) rosca de seguridad

b) re-entrancy de temporizador de notificaciones, donde su evento de temporizador puede desencadenar y te llame una segunda vez antes de que usted termine de procesar el primer evento. Por ejemplo. ver a esta pregunta: es seguro para subprocesos de ejecución mediante System.Threading.Timer y Monitor )

117voto

Hero Puntos 801

En su libro "CLR Via C#", Jeff Ritcher desalienta el uso de System.Timers.Timer , este temporizador se deriva de System.ComponentModel.Component , lo que le permite ser utilizado en la superficie de diseño de Visual Studio. Así que es sólo útil si desea que un temporizador en una superficie de diseño.

Prefiere utilizar System.Threading.Timer para tareas de fondo en un hilo de piscina.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X