2

たとえば、次のような大量のシェイプを含むキャンバスを作成します。

var canvas = CreateCanvasThatContainsShapes();

次に、すべてのキャンバスをメイン ページに追加します。

layoutRoot.Content = canvas;

この 2 行のコードを実行するのにそれほど時間はかかりませんが、すべての形状が画面に表示されるまでには時間がかかり、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 がありません。

ありがとう

4

1 に答える 1

1

画面にレンダリングするのにかかった時間を判断するのに役立つイベントがあります。レイアウトが更新されました。このイベントは、レイアウトの解析が完了するたびに発生します。を設定する前にタイマーを開始layoutRoot.Contentし、イベントが発生したら停止します。これは、レンダリング プロセスにかかった時間を示します。

注意すべきもう 1 つの便利なイベントは、 CompositionTarget.Renderingです。このイベントは、UI がレンダリングされるたびに発生します。このイベントは非常に頻繁に発生することがわかりますが、複雑なビジュアル ツリーを追加すると、イベントのストリームにギャップが生じます。

于 2011-06-17T08:03:44.433 に答える