Nuevamente me disculpo por una pregunta que podría ser simple para todos ustedes. Tengo una comprensión limitada de lo que ocurre entre bambalinas en Silverlight.DispatcherTimer y límites de actualización de IU en C# silverlight
Tengo una aplicación de gráficos (Visiblox) que utilizo como un ámbito móvil actualizado cada 20 ms, agregando y eliminando un punto. En pseudocódigo:
List<Point> datapoints= new List<Point>();
Series series = new Series(datapoints);
void timer_tick(){
datapoints.Add(new Point);
datapoints.RemoveAt(0);
// no need to refresh chart, it does refresh automatically
}
Cuando se ejecuta 6 series en esta herramienta de gráficos, comenzó a mostrar un poco lento. Cambiar la marca a 10ms no hizo diferencia alguna, la tabla se actualizó a la misma velocidad, por lo que parece que 20ms es el límite de velocidad (¿UI o gráfico?).
Probé con CompositionTarget.Rendering
y obtuve los mismos resultados: por debajo de 20 ms, no hubo diferencia en la velocidad.
Luego habilité accidentalmente ambos y dupliqué la velocidad. Así que probé con múltiples hilos (2, 3, 4) y la velocidad se duplicó, triplicó y cuadruplicó. Esto todavía no tiene bloqueos, ya que ni siquiera sé qué proceso necesito para generar un bloqueo, pero no tengo corrupción de datos ni pérdidas de memoria.
La pregunta que tengo es por qué un gráfico lento en 20 ms no puede ejecutarse en 10 ms, pero es ridículamente rápido cuando multiproceso? ¿El proceso de actualización de la interfaz de usuario se está ejecutando más rápido? ¿El cómputo del gráfico se ha duplicado? ¿O hay un límite de qué tan rápido se puede ejecutar un solo DispatcherTimer?
Gracias!
Editar: Tengo un fondo de codificación incorporado, así que cuando pienso en las discusiones y los tiempos, inmediatamente pienso en alternar un alfiler en el hardware y conectar un alcance para medir longitudes de proceso. Soy nuevo en los hilos en C# y no hay pines para conectar los alcances. ¿Hay alguna forma de ver los tiempos de los hilos gráficamente?
Tienes razón. Es una ilusión A velocidades lentas, es más fácil rastrear el gráfico con los ojos y la lentitud se detecta fácilmente, pero al actualizar más de un punto a la vez, la lentitud es difícil de ver. ¡Gracias! – PaulG