2011-02-07 2 views
3

デスクトップ全体に半透明のウィンドウを表示する小さなアプリがあります。ウィンドウがタスクバーに表示されず、タイトルバーが表示されないリアルタイムで矩形を移動するときの複数画面にわたる半透明ウィンドウのパフォーマンス

このウィンドウでは、マウスで矩形をドラッグできます。 マウスボタンを離すと、指定された領域のスクリーンショットが取得されます。 (Windows 7のスナップツールのようなもの)

これを達成するために、ウィンドウにはRectangleGeometryが含まれています。

CompositionTarget.Renderingイベントでは、マウスがダウンしたときのマウスの位置に設定された矩形があり、現在のマウス位置までの領域もカバーします。

これは、モニタが1台だけ接続されている限り、これは本当にうまく動作します。 高解像度の2台目のモニターを接続すると、パフォーマンスが大幅に低下します。

ラップトップディスプレイの解像度は、ディスプレイを接続することがHERESに新しい

ウィンドウ定義に一次スクリーニングを変更したとき接続されている1600×1200

ディスプレイはまた

1900x1200を有する

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     AllowsTransparency="True" Background="Transparent" WindowStyle="None" > 

the geometry definition 
<Path Fill="Black" Opacity="0.4" Stroke="Red" StrokeThickness="3"> 
    <Path.Data> 
     <RectangleGeometry x:Name="Inner" Rect="105,5,90,90"/> 
    </Path.Data> 
</Path> 

ここで、矩形を移動するコードの一部

System.Windows.Rect location = new System.Windows.Rect(this.DragStart.X, this.DragStart.Y, width, height); 

this.Inner.Rect = rect;

パフォーマンスを向上させる方法を知っている人はいますか? 複数のディスプレイで高解像度になるほど性能が低下するのは「正常」ですか?

+0

ウィンドウが小さくなるとパフォーマンスが向上することがわかりました。セカンダリ画面のサイズと関連があるようです。誰もが大画面がWPFの問題であることを知っていますか? –

答えて

2

まず第一に、私はCompositionTarget.Renderingは仕事のための適切なツールであることはよく分からない - それは良い以上のダメージを引き起こしている可能性があります - キャンバス内の単純なrectangeを使用してみてください...

私たちは、一般的に3〜4個の1920x1200のスクリーンにまたがる主要なアプリケーションウィンドウを持っています。 1つの画面に比べて複数の画面を使用すると、顕著な(ただし許容できる)パフォーマンスの低下があります。

Win XPスパンモードまたはwin7 NVIDIAモザイクモードを使用すると、パフォーマンス低下が大幅に軽減されることがわかりました(私たちは実行時環境を完全に制御しています)。

メインウィンドウのAllows Transparencyを無効にしなければならないことに注意してください。このオプションを有効にすると、パフォーマンス低下は許容できませんでした。

また、ソフトウェアレンダリングを試してみてください。私の経験では、NVIDIAクアッドログラフィックカードと組み合わせて、安定したアーティファクトフリーのマルチスクリーンWPF環境をwin XPで確実に実現する唯一の方法です。

関連する問題