Снова прошу прощения за вопрос, который может быть прост для всех вас. У меня есть ограниченное понимание того, что происходит за кулисами в Silverlight.DispatcherTimer и ограничения пользовательского интерфейса в C# 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#, и нет контактов для подключения областей. Есть ли способ увидеть графики потоков графики графически?
Вы правы. Это иллюзия. На медленных скоростях «перекатывание» диаграммы легче отслеживать глазами, а медлительность легко обнаруживается, но, обновляя более чем одну точку за раз, медлительность трудно увидеть. Благодаря! – PaulG