Ancora una volta mi scuso per una domanda che potrebbe essere semplice per tutti voi. Ho una comprensione limitata di ciò che va dietro le quinte di Silverlight.DispatcherTimer e limiti di aggiornamento dell'interfaccia utente in C# silverlight
Ho un'app per la creazione di grafici (Visiblox) che utilizzo come ambito rotante aggiornato ogni 20 ms, aggiungendo e rimuovendo un punto. In pseudocodice:
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
}
Durante l'esecuzione di 6 serie in questo strumento di creazione di grafici, ha iniziato a mostrare un po 'lenta. Cambiare il segno di spunta a 10 ms non ha fatto alcuna differenza, il grafico è stato aggiornato alla stessa velocità, quindi sembra che 20 ms sia il limite di velocità (UI o grafico?).
Ho provato con CompositionTarget.Rendering
e ho ottenuto gli stessi risultati: sotto 20 ms non c'era differenza di velocità.
Quindi ho accidentalmente abilitato entrambi e la velocità è raddoppiata. Così ho provato con più thread (2, 3, 4) e la velocità è raddoppiata, triplicata e quadruplicata. Questo non ha ancora serrature, in quanto non so nemmeno quale processo ho bisogno per generare un blocco, ma non ho ottenuto alcun danno o perdita di memoria.
La domanda che ho è perché un grafico lento a 20 ms non può essere eseguito a 10 ms ma è ridicolmente veloce quando multithreaded? Il processo di aggiornamento dell'interfaccia utente viene eseguito più velocemente? Il calcolo del grafico è raddoppiato? O c'è un limite alla velocità con cui un singolo DispatcherTimer può essere eseguito?
Grazie!
Edit: Ho una formazione di codifica incorporato, per cui quando penso di fili e tempi, penso subito commutando un perno in hardware e agganciare un ambito per misurare lunghezze di processo. Sono nuovo ai thread in C# e non ci sono pin per collegare gli ambiti. C'è un modo per vedere i tempi dei thread graficamente?
Hai ragione. È un'illusione. A basse velocità il "rolling" del grafico è più facile da tracciare con gli occhi e la lentezza è facilmente rilevabile, ma aggiornando più di un punto alla volta, la lentezza è difficile da vedere. Grazie! – PaulG