如何测试silverlight中可视树渲染的速度?

时间:2011-06-17 04:26:48

标签: wpf silverlight performance dispatcher visual-tree

例如,我创建了一个包含大量Shapes的Canvas,如下所示:

var canvas = CreateCanvasThatContainsShapes();

然后我将所有画布添加到主页:

layoutRoot.Content = canvas;

这两行代码运行的时间不会太长,但是所有形状都需要一段时间才会显示在屏幕上,并且UI会暂时无响应。

在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 个答案:

答案 0 :(得分:1)

您可以使用一个事件来帮助确定渲染到屏幕所需的时间; LayoutUpdated。只要布局解析完成,就会触发此事件。在设置layoutRoot.Content之前启动计时器,并在事件触发时将其停止。这告诉您渲染过程花了多长时间。

要注意的另一个有用的事件是CompositionTarget.Rendering,每次呈现UI时都会触发此事件。您应该会发现此事件经常触发,但是当您添加复杂的可视树时,您会在事件流中看到间隙。