DispatcherTimer и ограничения обновления пользовательского интерфейса в C # silverlight

Снова прошу прощения за вопрос, который может быть простым для всех вас. У меня ограниченное представление о том, что происходит за кулисами в Silverlight.

У меня есть приложение для построения графиков (Visiblox), которое я использую в качестве скользящего осциллографа, которое обновляется каждые 20 мс, добавляя и удаляя точки. В псевдокоде:

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
}

При запуске 6 серий в этом инструменте построения графиков он начал немного вяло. Изменение тика на 10 мс не имело никакого значения, график обновлялся с той же скоростью, поэтому кажется, что 20 мс - это ограничение скорости (пользовательский интерфейс или диаграмма?).

Я пробовал с CompositionTarget.Rendering и получил те же результаты: ниже 20 мс не было разницы в скорости.

Затем Я случайно включил оба, и скорость увеличилась вдвое. Итак, я тестировал с несколькими потоками (2, 3, 4) и удвоенной, утроенной и четырехкратной скоростью. У него еще нет блокировок, так как я даже не знаю, какой процесс мне нужен для создания блокировки, но не было ни повреждения данных, ни утечек памяти.

У меня возник вопрос, почему медленный график на 20 мс не может работать на 10 мс, но это смехотворно быстро при многопоточности? Выполняется ли процесс обновления пользовательского интерфейса быстрее? Вычисление графика удвоено? Или есть предел скорости выполнения одного DispatcherTimer?

Спасибо!


Изменить: у меня есть опыт встроенного кодирования, поэтому, когда я думаю о потоках и времени, Я сразу думаю о том, чтобы вставить штифт в оборудование и подключить осциллограф для измерения длины процесса. Я новичок в потоках на C #, и здесь нет контактов для подключения областей. Есть ли способ увидеть время потоков графически?

8
задан Gergely Orosz 14 January 2011 в 11:13
поделиться