2

いくつかの背景

リアルタイムの制約を必要とする画面上の多数のウィンドウを移動するアプリケーションを作成しています。私は通常、次の形式を使用してウィンドウの位置を設定します。

this.Left = position.x;
this.Top = position.y;

質問

私が知りたいのは、これがこれを行うための最速の、または最も効率的な方法であるかどうかです。Leftを設定すると、イベントが自動的に発生して更新されますか、それともOnRenderイベントを待機しますか?

第二に、位置をまとめて設定するだけの機能がないのはなぜですか?それともこれは必要ですか?Windows APIにが含まれていることは承知していますがSetWindowPos、管理されていないコードには近づかないようにしたいと思います。この関数を使用する方が速いでしょうか?

4

1 に答える 1

3

それが最も効率的かどうかはわかりませんが、何度も呼び出すとパフォーマンスの問題が発生する可能性があります。これは、LeftおよびTop依存関係プロパティのPropertyChangedCallbackインスタンスがOnPositioningChangedメソッドに設定されているためです。このメソッドはInvalidateArrangeを呼び出します。リンクから:

InvalidateArrange、特にUpdateLayoutを頻繁に呼び出すと、パフォーマンスに重大な影響があります。

私はそれが明白な答えであることを知っていますが、最良の方法は両方の方法をベンチマークし、どちらがあなたのために働くかを見ることです。管理されていないルートを使用するか、現在の方法を使用するかに関係なく、ある時点で同じレンダリング呼び出しを行う必要があると思います(修正されてうれしいです)。

于 2013-09-01T00:27:07.497 に答える