Как проверить скорость визуального визуализации дерева в Silverlight? - PullRequest
2 голосов
/ 17 июня 2011

Например, я создаю Canvas, который содержит большое количество фигур, например:

var canvas = CreateCanvasThatContainsShapes();

Затем я добавляю все полотно на главную страницу:

layoutRoot.Content = canvas;

Это займет не так много времени для запуска этих двух строк кода, но потребуется время, чтобы все фигуры отобразились на экране, и пользовательский интерфейс некоторое время не будет отвечать.

В WPF я могу проверить время визуализации визуального дерева, выполнив что-то вроде этого:

//create logic tree and add it to main page
stopWatch.Start();
Dispatcher.BeginInvoke(new Action(()=>{
stopWatch.Stop();
//Show the ellipsed time
}),DispatcherPriority.Loaded);

Таким образом, секундомер запускается после создания логического дерева и останавливается после визуализации (загрузки) визуального дерева.

Но в Silverlight нет DispatcherPriority, тогда как я могу сделать то же самое?

Спасибо

1 Ответ

1 голос
/ 17 июня 2011

Существует событие, которое вы можете использовать, чтобы помочь определить время, необходимое для отображения на экране; LayoutUpdated . Это событие вызывается всякий раз, когда анализ макета завершается. Запустите таймер до того, как вы установите layoutRoot.Content, и остановите его, когда произойдет событие. Это говорит о том, сколько времени занял процесс рендеринга.

Другое полезное событие, которое нужно посмотреть, это CompositionTarget.Rendering , это событие вызывается каждый раз, когда отображается пользовательский интерфейс. Вы должны обнаружить, что это событие срабатывает очень часто, однако при добавлении сложного визуального дерева вы увидите пробел в потоке событий.

...